Использование Стека вызовов в качестве условия оператора Если [...] Тогда
Разработка - Механизмы платформы 1С

Немного теории Стек вызовов - это инструмент, который показывает последовательность процедур и функций, исполнение которых привело к той строке модуля, что отлаживается сейчас. Стек большинство разработчиков используют при отладке исполнения кода. Также многие заметили, что начиная с платформы 8.3.15 в Журнал регистрации базы 1С и в операторе "Попытка ... Исключение ... КонецПопытки" возможно увидеть полный стек вызовов всех процедур, а не только вызов последней строки как было раньше (и this is хорошо).
Для начала расскажу как первый раз применил получение и разбор стека исполнения самим кодом 1С. В конец дам общий принцип по применению на практике.
Возникла проблема: При закрытии месяца в 1С: ERP, при выполнении операции "Формирование записей книг покупок и продаж" произошла ошибка: Операцию не удалось выполнить по причине того, что Отражение документов в регл учете невозможно поместить в запрещенный период. Дате 01.06.2019 соответствует запрет изменения данных для пользователя "Администратор (Михаил)" по 31.05.2020 (установлена общая дата запрета)
Сформировалась задача, которую нужно было быстро сделать: Не нужно применять контроль даты запрета в случае выполнения операции "Формирование записей книг покупок и продаж" при закрытии месяца.
Приступив к решению задачи:
- Отыскал исходную ошибку по Журналу регистрации 1С


При выполнении операции "Формирование записей книг покупок и продаж" произошла ошибка:
Не удалось выполнить по причине Отражение документов в регл учете невозможно поместить в запрещенный период.
Дате 01.06.2019 соответствует запрет изменения данных для пользователя "ГлавныйБухгалтерЗаместитель" по 29.02.2020 (установлена общая дата запрета)
{ОбщийМодуль.РеглУчетПроведениеСервер.Модуль(3509)}: ВызватьИсключение ОписаниеОшибки;
{ОбщийМодуль.РеглУчетПроведениеСервер.Модуль(733)}: ПроверитьДатуЗапретаДляОтраженияДокументовВРеглУчете(ШаблонЗапретаДанных);
{ОбщийМодуль.УчетНДСУПСлужебный.Модуль(9191)}: РеглУчетПроведениеСервер.ВернутьДокументыКОтражению(ПараметрыРасчета.МенеджерВременныхТаблиц);
{ОбщийМодуль.УчетНДСУПСлужебный.Модуль(1602)}: ВернутьДокументыКОтражениюВУчете(ПараметрыРасчета);
{ОбщийМодуль.УчетНДСУПСлужебный.Модуль(1588)}: ВыполнитьРасчет(ПараметрыРасчета);
{ОбщийМодуль.УчетНДСУПСлужебный.Модуль(1506)}: ВыполнитьРасчетСЗамеромВремени(ПараметрыРасчета);
{ОбщийМодуль.УчетНДСУП.Модуль(7742)}: УчетНДСУПСлужебный.СформироватьЗаписиКнигиПокупокПродаж(КонецПериода, МассивОрганизаций, МассивСчетовФактур);
{ОбщийМодуль.ЗакрытиеМесяцаСервер.Модуль(13608)}: УчетНДСУП.ВыполнитьЗаданияПоФормированиюКнигиПокупокПродаж(
{(1)}:ЗакрытиеМесяцаСервер.Выполнить_ФормированиеЗаписейКнигПокупокИПродаж(Параметры[0])
{ОбщийМодуль.ОбщегоНазначения.Модуль(4856)}: Выполнить ИмяМетода + "(" + ПараметрыСтрока + ")";
{Обработка.ОперацииЗакрытияМесяца.МодульМенеджера(1558)}: ОбщегоНазначения.ВыполнитьМетодКонфигурации(
{(1)}:Обработки.ОперацииЗакрытияМесяца.ВыполнитьРасчетЭтапов(Параметры[0])
{ОбщийМодуль.ОбщегоНазначения.Модуль(4856)}: Выполнить ИмяМетода + "(" + ПараметрыСтрока + ")";
{ОбщийМодуль.УчетНДСУПСлужебный.Модуль(1526)}: ВызватьИсключение ТекстСообщения;
{ОбщийМодуль.УчетНДСУП.Модуль(7742)}: УчетНДСУПСлужебный.СформироватьЗаписиКнигиПокупокПродаж(КонецПериода, МассивОрганизаций, МассивСчетовФактур);
{ОбщийМодуль.ЗакрытиеМесяцаСервер.Модуль(13608)}: УчетНДСУП.ВыполнитьЗаданияПоФормированиюКнигиПокупокПродаж(
{(1)}:ЗакрытиеМесяцаСервер.Выполнить_ФормированиеЗаписейКнигПокупокИПродаж(Параметры[0])
{ОбщийМодуль.ОбщегоНазначения.Модуль(4856)}: Выполнить ИмяМетода + "(" + ПараметрыСтрока + ")";
{Обработка.ОперацииЗакрытияМесяца.МодульМенеджера(1558)}: ОбщегоНазначения.ВыполнитьМетодКонфигурации(
{(1)}:Обработки.ОперацииЗакрытияМесяца.ВыполнитьРасчетЭтапов(Параметры[0])
{ОбщийМодуль.ОбщегоНазначения.Модуль(4856)}: Выполнить ИмяМетода + "(" + ПараметрыСтрока + ")";
Открыл в конфигураторе ОбщийМодуль.РеглУчетПроведениеСервер строку № 3509 с текстом ВызватьИсключение ОписаниеОшибки;
Процедура ПроверитьДатуЗапретаДляОтраженияДокументовВРеглУчете(ШаблонЗапретаДанных, НаборЗаписей = Неопределено, ОтражаемыйДокумент = Неопределено)
Если НаборЗаписей = Неопределено Тогда
Отбор = Новый Структура;
НаборЗаписей = Новый Структура("Регистр, Отбор", "РегистрСведений.ОтражениеДокументовВРеглУчете", Отбор);
Иначе
НаборЗаписей.ДополнительныеСвойства.Вставить("ПроверкаДатыЗапретаИзменения", Ложь);
КонецЕсли;
ОписаниеДанных = Новый Структура("НоваяВерсия, Данные", Истина, НаборЗаписей);
ОписаниеОшибки = "";
Если ДатыЗапретаИзменения.НайденЗапретИзмененияДанных(ШаблонЗапретаДанных, ОписаниеДанных, ОписаниеОшибки) Тогда
ЗаписьЖурналаРегистрации(
НСтр("ru = 'Установка нового статуса отражения в учете';
|en = 'Set new status of recording in accounting'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,
?(ОтражаемыйДокумент = Неопределено, ОтражаемыйДокумент, ОтражаемыйДокумент.Метаданные()),
?(ОтражаемыйДокумент = Неопределено, ОтражаемыйДокумент, ОтражаемыйДокумент),
ОписаниеОшибки);
ВызватьИсключение ОписаниеОшибки;
КонецЕсли;
КонецПроцедуры
Вижу, что процедура обща я (вызывается для разных ситуаций), на первый взгляд нет никакого признака показывающего, что вызов идет из обработки закрытия месяца.
- В поисках решения сразу пришли мысли: протянуть из обработки закрытия какой-нибудь параметр функции или сделать некий глобальный признак. Стал смотреть стек вызовов всех процедур (см. выше блок "Текст ошибки со стеком вызова")
читаю в нём:
....
ЗакрытиеМесяцаСервер.Выполнить_ФормированиеЗаписейКнигПокупокИПродаж(Параметры[0])
...
Обработки.ОперацииЗакрытияМесяца.ВыполнитьРасчетЭтапов
....
и тут загорается лампочка!
Можно ведь по тексту стека вызовов понять, что вызов идёт из закрытия месяца!
- Нашёл, как получить стек вызовов в коде. Строку с данными стека вызовов можно получить только следующей комбинацией ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()). Причем отдельно в ИнформацияОбОшибке() данных о стеке не содержится, она загадочным образом достается только функцией ПодробноеПредставлениеОшибки().
Попытка
ВызватьИсключение "Любой текст";
Исключение
ПолныйТекстОшибкиВключаяСтекВызовов = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
- Далее создал расширение конфигурации, в которое перетащил процедуру &Вместо("ПроверитьДатуЗапретаДляОтраженияДокументовВРеглУчете") из ОбщийМодуль.РеглУчетПроведениеСервер. Описал условие Если [...] Тогда, где поиском выражений-маркеров в полном тексте ошибки понимаю, что идёт вызов этапа формирования книг из обработки закрытия месяца и не применяю контроль даты запрета.
&Вместо("ПроверитьДатуЗапретаДляОтраженияДокументовВРеглУчете")
Процедура рзд_ПроверитьДатуЗапретаДляОтраженияДокументовВРеглУчете(ШаблонЗапретаДанных, НаборЗаписей, ОтражаемыйДокумент)
Попытка
#Область ТиповойКодИсходнойПроцедуры
Если НаборЗаписей = Неопределено Тогда
Отбор = Новый Структура;
НаборЗаписей = Новый Структура("Регистр, Отбор", "РегистрСведений.ОтражениеДокументовВРеглУчете", Отбор);
Иначе
НаборЗаписей.ДополнительныеСвойства.Вставить("ПроверкаДатыЗапретаИзменения", Ложь);
КонецЕсли;
ОписаниеДанных = Новый Структура("НоваяВерсия, Данные", Истина, НаборЗаписей);
ОписаниеОшибки = "";
Если ДатыЗапретаИзменения.НайденЗапретИзмененияДанных(ШаблонЗапретаДанных, ОписаниеДанных, ОписаниеОшибки) Тогда
ЗаписьЖурналаРегистрации(
НСтр("ru = 'Установка нового статуса отражения в учете';
|en = 'Set new status of recording in accounting'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,
?(ОтражаемыйДокумент = Неопределено, ОтражаемыйДокумент, ОтражаемыйДокумент.Метаданные()),
?(ОтражаемыйДокумент = Неопределено, ОтражаемыйДокумент, ОтражаемыйДокумент),
ОписаниеОшибки);
ВызватьИсключение ОписаниеОшибки;
КонецЕсли;
#КонецОбласти
Исключение
//Нужно отключить контроль при закрытии для документов по НДС
ПолныйТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
Если Найти(ПолныйТекстОшибки, "ЗакрытиеМесяцаСервер.Выполнить_ФормированиеЗаписейКнигПокупокИПродаж") > 0
И Найти(ПолныйТекстОшибки, "УчетНДСУП.ВыполнитьЗаданияПоФормированиюКнигиПокупокПродаж") > 0 Тогда
//Не прерываем в случае ошибок такого вида:
//Дате 01.06.2019 соответствует запрет изменения данных для пользователя "ГлавныйБухгалтерЗаместитель" по 29.02.2020 (установлена общая дата запрета)
//{ОбщийМодуль.РеглУчетПроведениеСервер.Модуль(3509)}: ВызватьИсключение ОписаниеОшибки;
//{ОбщийМодуль.РеглУчетПроведениеСервер.Модуль(733)}: ПроверитьДатуЗапретаДляОтраженияДокументовВРеглУчете(ШаблонЗапретаДанных);
//{ОбщийМодуль.УчетНДСУПСлужебный.Модуль(9191)}: РеглУчетПроведениеСервер.ВернутьДокументыКОтражению(ПараметрыРасчета.МенеджерВременныхТаблиц);
//{ОбщийМодуль.УчетНДСУПСлужебный.Модуль(1602)}: ВернутьДокументыКОтражениюВУчете(ПараметрыРасчета);
//{ОбщийМодуль.УчетНДСУПСлужебный.Модуль(1588)}: ВыполнитьРасчет(ПараметрыРасчета);
//{ОбщийМодуль.УчетНДСУПСлужебный.Модуль(1506)}: ВыполнитьРасчетСЗамеромВремени(ПараметрыРасчета);
//{ОбщийМодуль.УчетНДСУП.Модуль(7742)}: УчетНДСУПСлужебный.СформироватьЗаписиКнигиПокупокПродаж(КонецПериода, МассивОрганизаций, МассивСчетовФактур);
//{ОбщийМодуль.ЗакрытиеМесяцаСервер.Модуль(13608)}: УчетНДСУП.ВыполнитьЗаданияПоФормированиюКнигиПокупокПродаж(
//{(1)}:ЗакрытиеМесяцаСервер.Выполнить_ФормированиеЗаписейКнигПокупокИПродаж(Параметры[0])
//{ОбщийМодуль.ОбщегоНазначения.Модуль(4856)}: Выполнить ИмяМетода + "(" + ПараметрыСтрока + ")";
//{Обработка.ОперацииЗакрытияМесяца.МодульМенеджера(1558)}: ОбщегоНазначения.ВыполнитьМетодКонфигурации(
//{(1)}:Обработки.ОперацииЗакрытияМесяца.ВыполнитьРасчетЭтапов(Параметры[0])
//{ОбщийМодуль.ОбщегоНазначения.Модуль(4856)}: Выполнить ИмяМетода + "(" + ПараметрыСтрока + ")";
//{ОбщийМодуль.УчетНДСУПСлужебный.Модуль(1526)}: ВызватьИсключение ТекстСообщения;
//{ОбщийМодуль.УчетНДСУП.Модуль(7742)}: УчетНДСУПСлужебный.СформироватьЗаписиКнигиПокупокПродаж(КонецПериода, МассивОрганизаций, МассивСчетовФактур);
//{ОбщийМодуль.ЗакрытиеМесяцаСервер.Модуль(13608)}: УчетНДСУП.ВыполнитьЗаданияПоФормированиюКнигиПокупокПродаж(
//{(1)}:ЗакрытиеМесяцаСервер.Выполнить_ФормированиеЗаписейКнигПокупокИПродаж(Параметры[0])
//{ОбщийМодуль.ОбщегоНазначения.Модуль(4856)}: Выполнить ИмяМетода + "(" + ПараметрыСтрока + ")";
//{Обработка.ОперацииЗакрытияМесяца.МодульМенеджера(1558)}: ОбщегоНазначения.ВыполнитьМетодКонфигурации(
//{(1)}:Обработки.ОперацииЗакрытияМесяца.ВыполнитьРасчетЭтапов(Параметры[0])
//{ОбщийМодуль.ОбщегоНазначения.Модуль(4856)}: Выполнить ИмяМетода + "(" + ПараметрыСтрока + ")";
Иначе
ВызватьИсключение ОписаниеОшибки;
Конецесли
КонецПопытки;
КонецПроцедуры
Разбор стека самим кодом помог определять откуда пользователь стартует вызов, чтобы снять типовое ограничение в общем методе.
Какой могу сделать вывод в заключение:
Используя инъекцию конструкции (см. ниже) в код конфигурации (напрямую или через расширение) можно дополнительно анализировать данные стека вызовов. Возможность, которая немного расширяет горизонты разработки условий.
Попытка
ВызватьИсключение "Любой текст";
Исключение
ПолныйТекстОшибкиВключаяСтекВызовов = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
Если Найти(ПолныйТекстОшибкиВключаяСтекВызовов, "Выражение-маркер 1") > 0
И ...
И Найти(ПолныйТекстОшибкиВключаяСтекВызовов, "Выражение-маркер N") > 0 Тогда
//Исполняемый код 1
Иначе
//Исполняемый код 2
КонецЕсли;
КонецПопытки;
Коллеги, все знают о том, что попытки исключения - это затратный по времени механизм его нужно применять с осторожностью, это не панацея, я лично против него.
Основная мысль заложенная в данную публикацию это ИДЕЯ как вытащить дерево стека в сам исполняемый код, идея которую можно положить себе в ячейку памяти. Возможно она пригодиться!
На практике такой приём позволяет зашить часть возможностей отладки в СВОЙ КОД 1С, чтобы он получал и анализировал дерево стека и направлял алгоритм в разные ветки, в зависимости от наличия в тексте стека вызова определенных процедур (выражений-маркеров).
| Расширение: Быстрые отборы через буфер [Alt+C] Копировать, [Alt+V] Вставить | Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации клавиш [Alt+C] Копировать, [Alt+V] Вставить. |
| Резервное копирование и восстановление 1С баз на PostgreSQL в Windows с помощью pgAdmin, bat-файлов и планировщика | В данной инструкции будет описано, как с помощью pgAdmin, bat-файлов и планировщика заданий Windows организовать резервное копирование, восстановление и хранение копий баз данных. |
| Гарантированное проведение документов (подключаемое расширение) | Гарантированное проведение указанного в регистре сведений списка документов. Регистрируем документы к проведению с помощью произвольных отборов СКД в регистре сведений, далее запускаем фоновое проведение в нескольких потоках. Проведенные документы удаляются из регистра, по непроведенным регистрируются ошибки. |
| Ускорим проведение в 1С:Управление холдингом | В 1С:Управление холдингом есть "нехороший" запрос, который съедает значительную часть времени проведения документов. Если его подправить, то проведение заметно ускорится. |
| Динамическая кнопка VS Комбинация клавиш | Часто требуется ко всем формам или к списку форм привязать новые действия. Но как это сделать не меняя каждую форму и в идеале не меняя конфигурацию? Ниже будет описано, как запрограммировать новые действия через расширение (т.е. не меняя конфигурации) и сделать это универсально (не меняя каждую форму). |
| Параметризация печатных форм под контрагентов (подключаемое расширение) | Расширение добавляет возможности параметризации печати для контрагентов. Подробнее описано здесь //infostart.ru/1c/articles/1510459/ |
| Просмотр объектов очереди сообщений в 1С:Документооборот | В базах с бесшовной интеграцией с 1С:Документооборот есть Регистр сведений "Очередь сообщений в 1С:Документооборот". Для пользователя он мало информативен. Расширение позволяет просматривать сообщение в человеческом виде. И понимать проблему до объекта. |
| Поддержка пользователей [Alt+S] (подключаемое расширение) | Расширение, подключаемое к базе 1С для решения задач поддержки пользователей. Позволяет быстро (по кнопке или комбинации клавиш Alt+S), не выходя из программы 1С из любой формы, создать обращение к консультантам и программистам со скринами, файлами, в привязке к проблемному объекту (документу, справочнику, отчету, обработке и т.п.). Вести переписку по обращениям, отслеживать их выполнение с трудозатратами и уведомлять участников через механизмы: Telegram, Обсуждения 1С и Электронную почту. Код открыт и расширение может развиваться и быть доработано под индивидуальные потребности. |
| Интерактивная справка [Alt+I] (подключаемое расширение) | Дополнительная справка, подключаемая к базе 1С. Содержит дерево разделов и статьи. Позволяет создавать статьи с картинками, прикреплять к ним файлы и видео, а также связывать статьи с объектами 1С (документам, справочникам, отчетам). Вызывается на динамически создаваемую кнопку панели либо быстрой комбинацией клавиш Alt+I. |
| Защита объектов от изменения обменом | Расширение позволяет пользователю заблокировать объект 1С (документ, справочник) от изменения последующими загрузками данных или обменами. |
| Доп. панель Alt+Z | Панель, вызываемая для объекта комбинацией клавиш Alt+Z (для документа, справочника, плана вида характеристик, плана счетов и т.д.). Возможности: Редактор всех реквизитов, таблиц и движений, Анализ прав к объекту, Поиск ссылок на объект с фильтрами, Сторно движений документа, Выгрузка/загрузка текущего объекта между базами. Подключается как Расширение. |
| Создание стартовой базы | Часто требуется создать «Новую базу» почти пустую, но совпадающую с «Исходной базой» по необходимым обязательным настройкам: константам, регистрам сведений, справочникам, видам субконто и планами счетов и т.п., при этом уникальные идентификаторы объектов должны совпадать. |
| Групповое добавление и удаление ролей из списка профилей | Подключаемая обработка. Помогает при конструировании профилей доступа пользователей (настройке прав пользователей), экономит время на добавлении/удалении одной и той же роли сразу в нескольких профилях. |
| Интерактивная справка по объектам 1С (автономное расширение) | База знаний, подключаемая к объектам основной базы. Ведётся интерактивно, формируется в виде статей прямо в 1С (текст, картинки, таблицы, ссылки). Есть возможность прикрепления файлов, привязки к объектам 1С, возможности рейтинга и комментирования пользователями. |
| Значения по умолчанию для пользователей (Расширение) | При заполнении документов и справочников пользователи часто сталкиваются с необходимостью ввода одних и тех же реквизитов. Заполнение в документах некоторых из них, таких как: Организация, Склад и т.п. - выполняется реализованным в 1С механизмом подстановки значения из последних 3-5 введенных документов. Если же вы хотите заполнять все реквизиты шапки (и даты, и флажки, и другие поля, включая дополнительные реквизиты), то вам поможет данный механизм. |
| Контекст любого объекта конструкцией #Если Фамилия Тогда | Делаем инициализацию переменной в "своей" инструкции препроцессора, для получения контекстной подсказки объекта через точку. В дальнейшем в компилированном коде сама инициализация игнорируется, т.к. "своя" инструкция препроцессора НИКОГДА не выполняется. |
| Отключение Монитора ИТС и Проверки наличия обновления (расширение) | Некоторые интернет-сервисы базы 1С у пользователей вызывают замедления работы и клиенту не нужны. Их можно отключить через расширения. |
| Памятка работ по проекту 1С | Схема работ по проекту внедрения 1С освежает в голове и визуализирует общую картину мероприятий. Будет полезно как для Заказчика так и для Исполнителя при подготовке проекта и проведении совещаний по ходу проекта. |
| Использование Стека вызовов в качестве условия оператора Если [...] Тогда | Делюсь интересным приёмом, позволяющим использовать данные стека исполнения кода 1С в качестве условия, накладываемого на выполнение кода. |
| Уведомление пользователей об изменениях в объектах (расширение) | Позволяет без доработок настроить уведомления пользователям об изменениях объектов и их реквизитов. Уведомления отправляются в виде задач по проверке объектов с ссылками на объекты. |
| Права доступа к объектам с гибкими отборами (расширение) | Возможность без доработок конкретизировать пользователям права Просмотра и Изменения объектов базы 1С, установив ограничения с помощью отборов системы компоновки данных. |
| Памятка работ по задаче 1С | Памятка выполняемых работ по решению длительных задач по 1С |
| Применение программистом таблицы рисков для оценки технического задания | Я как программист часто получаю технические задания, по которым от меня хотят услышать оценку. Привожу описание метода оценки задания, заимствованный из проектной технологии, по которому я оцениваю тех. задания |
| Добрый великан | Руководители проектов определяют наше настоящее, каким оно будет?! Ответ прост - таким, каким и сам РП. |
| Настройка ограничений входа пользователей в базу (расширение) | Настраиваем для пользователей 1С разрешенное количество открытых сеансов к текущей базе данных 1С в привязке к компьютерам. (У пользователя не будет возможности превысить допустимое количество сеансов или зайти с чужого компьютера). |
| Переход с партий и производства версии 2.1 на режимы 2.2 в 1С:ERP в середине года | В данной статье рассказано о практическом опыте ВЦ «Раздолье» в переводе работы клиентов в «1С:ERP Управление предприятием» на новые режимы: использование производства 2.2 и партионный учет версии 2.2 (далее режимы 2.2) после начала года, доработки изменения. |
| БП 3.0, Закрытие месяца, Отключение проверок операций прошлых периодов | Расширение конфигурации, отключающее ошибки прошлых периодов, которые блокируют закрытие текущего месяца. Например, "Нарушена последовательность регламентных операций" и т.д. |
| Проводим по БУ "на лету" | В базе ERP и КА есть форма тестировщика, которая автоматически получает из конфигурации полные тексты запросов формирования бухгалтерских проводок выбранного документа, даёт возможность модифицировать запрос и сразу проверить результат. |
| Административная панель #расширение объекта | Панель команд текущего объекта (документа, справочника и т.д.) со следующим возможностями: Редактор реквизитов, таблиц и движений текущего объекта, Анализ прав доступа к текущему объекту, Поиск ссылок на объект с отборами, Сторно движений документа, Выгрузка/загрузка текущего объекта между базами. Реализована всплывающей панелью в форме объекта. Подключается как расширение конфигурации (*.cfe) либо отдельными обработками. |
|
Универсальный обмен данными XML (с гибкими отборами и сохранением вариантов настроек) |
Обработка предназначена для загрузки и выгрузки данных по правилам обмена в любых конфигурациях, реализованных на платформе 1С:Предприятие 8.3. Преимуществом перед типовой обработкой является добавленный функционал: #1. Установка произвольных фильтров на выгружаемые объекты при помощи механизма системы компоновки данных #2. Сохранение различных вариантов настроек (сохраняются правила обмена, фильтры выгрузки, параметры, настройки обработки) - что позволяет гибко настроить в базе-источнике фильтры для выгрузки объектов по различным правилам обмена для различных баз-приемников, сохранить выполненные настройки и в будущем уже пользоваться этими вариантами настроек. |
|
Обработка выгрузки и загрузки данных через XML между идентичными конфигурациями с возможностью установки произвольных отборов на выгружаемые объекты. |
|
|
Подключаемый отчет на системе компоновки данных по типам объектов 1С показывает: 1) Совокупности таблиц SQL для хранения объекта 1С и их предназначение; 2) Число объектов данного типа; 3) Размеры хранения данных и индексов в MB (мегабайтах); 4) Сравнение данных двух баз |
|
|
Запуск 1С под любым пользователем (без необходимости указания пароля) |
Предназначается для запуска сеанса другого пользователя из своего сеанса 1С (если пароль вам неизвестен). |
|
Если пользователю не хватает прав на объект, то на практике в 90 % случаев, недостающую роль можно найти через типовой регистр сведений Права ролей. Также с помощью дополнительного отчета или небольшого расширения можно ускорить описанный процесс. |
|
|
Онлайн диаграмма доступных лицензий 1С и показателей ресурсов сервера 1С в различных измерениях и отборах. |
|
|
Обработка ищет все объекты базы, в которых одновременно присутствуют перечисленные элементы. Построена на базе типовой обработки Все функции - Стандартные - Поиск ссылок на объект, но позволяет накладывать отбор не по одному объекту, а по нескольким, что позволяет настраивать поиск по комбинациям условий |
|
|
Структура подчиненности с хронологией документов и кнопками проведения и удаления |
Часто не хватает визуализации хронологии документов в структуре подчиненности и кнопок проведения. Это расширение конфигурации, с функционалом структуры подчиненности документов, отображающее хронологическую последовательность документов во времени и дающее доступ к проведению, отмене проведения, пометке на удаление документов непосредственно в форме подчиненности. |
|
Обработка для массовой проверки доработок конфигурации: Открытие форм, Печать, Формирование отчетов, Проведение документов, Запись справочников, ПВХ, ПВР. Выдает список обнаруженных ошибок. Рекомендуется применять для тестирования обновленной конфигурации, перед установкой пользователям. В коде используются универсальные методы поэтому подходит для большинства конфигураций, построенных на базе библиотеки стандартных подсистем. |
|
|
Групповая обработка ссылок вида Объект не найден (502:37855254002e11eb11e73b8f36150d9e) заполняется максимально просто копированием и вставкой из буфера: 1) Выделяет уникальные идентификаторы (далее УИ); 2) Ищет ссылки на объекты базы по УИ; 3) Создаёт пустые объекты с указанным УИ; 4) Регистрирует найденные ссылки для обмена данными. Работает на любых продуктах 8.3 |
|
|
Внешняя обработка (работает в обычном и управляемом интерфейсе). Пригодиться для работы с узлами распределенных баз данных: 1) Снимает замки блокировки конфигурации подчиненного узла или возвращает их. 2) Дает возможность подключить архив рабочей базы как подчиненный узел без создания образа. 3) Дает возможно синхронизировать конфигурации узлов вручную, если например есть ошибки обмена или размер конфигурации велик для передачи через сообщения обмена. Ситуации описаны в полном описании. Проверялось на платформе 8.1, 8.2, 8.3, для 1С:УПП, 1С:Розница, 1С:Бухгалтерия 1.6, 2.0, 3.0, 1С:ERP |
|
|
Обработка на управляемых формах для работы с календарями google, событиями календарей и контактами. |
|
|
Обработка проверяет наличие и решает проблему с ошибкой развернутого сальдо в Оборотно-сальдовой ведомости (регистр бухгалтерии Хозрасчетный) из-за ошибки Универсального редактора реквизитов или кода программиста, устанавливающего пустые ссылки в значениях Валюты, Подразделения, Направления деятельности не равными NULL. И пересчёт итогов тут точно не поможет... |
|
|
Тест серверного оборудования на допустимое количество пользователей: как это использовать? |
Выполнил 3 разных теста для проверки серверного оборудования (тест 1С, тесты gilev) на возможное число 1С онлайн-пользователей одновременно работающих на нем и интерпретировал результаты тестов через легких, средних и тяжелых пользователей с помощью таблицы с профилями реальных пользователей. |
|
Перед началом проекта требуется определить параметры серверного и клиентского оборудования, необходимые для работы внедряемой программы 1С:Предприятие, и учесть будущую нагрузку, которая ляжет на систему в реальной рабочей обстановке. Мощность оборудования должна быть достаточной для нормальной работы пользователей. Но как подобрать сервер простым способом? |
|
|
На время сеанса отключаем контроль остатков и проверку документов в ERP, КА, УТ типовыми средствами и простым расширением. Часто при моделировании примеров бизнес-процессов, на запуске в эксплуатацию или закрытии требуется несколько раз прогнать ситуацию с разными настройками, а для этого изменить, удалить ранее введенную цепочку документов. Дается все это с трудом. Ты уверен, что не навредишь своими действиями системе, но документы цепляют друг друга и ругаются контролями остатков, не разрешая тебе менять их в произвольном порядке. Есть несколько удобных опций для облегчения внесения изменений. |
|
|
Огорчает один момент в типовых решениях, когда проводится документ, ругаясь на нехватку остатков, система не сообщает, по какому именно регистру проблема. Дополнив сообщения контроля названием регистра, можно уменьшить время расследования проблемы (исключив из процесса необходимость запуска программистом отладки в конфигураторе для выявления имени проблемного регистра). |
|
|
Для уведомления пользователей программных продуктов 1С о разных событиях, в них включена подсистема «Новостной центр». Это довольно удобная штука, т.к. новостные ленты сообщают о выходе обновлений, о новостях и событиях в сфере учёта. Но можно увеличить пользу от новостной подсистемы используя её локально в рамках 1С базы. Например, внутренняя служба техподдержки или внедряющая компания может через новостную ленту оповещать пользователей информационной базы об изменениях в программе, совещаниях, проведении тестирований, заполнения нужных документов или сдача отчетов к определенной дате и т.п. |
|
|
Пример технического задания для практического понимания основных разделов. |
|
|
Кратко описаны основополагающие моменты при старте групповой разработки конфигурации несколькими программистами. Полезно для проектной документации как требование к разработчикам или сопровождающей компании |
Ссылка на компетенции по 1С:ERP - команда со знаниями, умениями и успешными проектами.
Вступайте в нашу телеграмм-группу Инфостарт
Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
См. также
Механизмы платформы 1С Разработчик Бесплатно (free)
Разберем 15 мифов о работе платформы «1С:Предприятие 8» – как распространенных, так и малоизвестных. Начнем с классики: «Код, написанный в одну строку, работает быстрее, чем многострочный». Так ли это на самом деле?
16.07.2025 45543 TitanLuchs 109
Работа с интерфейсом WEB-интеграция Механизмы платформы 1С Бесплатно (free)
Веб-интерфейсы повышают качество внешнего вида приложений 1С, предсказуемы с точки зрения верстки, позволяют организовать удобные и высокопроизводительные рабочие места для пользователей. Расскажем об особенностях разработки веб-интерфейсов на React внутри 1С, двустороннем взаимодействии 1С и JavaScript, а также сборке веб-приложения в одностраничный файл.
19.06.2025 18564 zeegin 15
Механизмы платформы 1С Работа с интерфейсом Разработчик Стажер 1С:Предприятие 8 Бесплатно (free)
Про ООП в 1С и о том, как сделать свой код более кратким и выразительным при помощи использования текучего интерфейса (fluent interface).
03.02.2025 25958 bayselonarrend 127
Механизмы платформы 1С Разработчик 1С:Предприятие 8 Бесплатно (free)
В этой статье подробно рассматривается работа с JSON в XDTO в 1С:Предприятие. Вы узнаете, как сериализовать и десериализовать объекты XDTO в JSON, интегрировать 1С с веб-сервисами и API, а также корректно обрабатывать данные при обмене. Разбираются особенности работы с коллекциями, использование функций восстановления и частые ошибки при работе с JSON и XDTO.
30.01.2025 33152 user2122906 10
Механизмы платформы 1С Файловый обмен (TXT, XML, DBF), FTP Разработчик 1С:Предприятие 8 Бесплатно (free)
Этот материал познакомит вас с механизмом XDTO (XML Data Transfer Objects) в 1С и научит эффективно использовать его возможности. Мы разберёмся, как работать с XML-схемами, создавать модели данных, манипулировать объектами XDTO, а также сериализовать и десериализовать их в XML. Вы узнаете, как использовать XDTO для интеграции с внешними системами, избегать типичных ошибок и оптимизировать код. К концу вы будете уверенно применять XDTO для решения сложных задач обмена данными и автоматизации процессов.
17.01.2025 55504 user2122906 13
Механизмы платформы 1С WEB-интеграция Разработчик 1С:Предприятие 8 Бесплатно (free)
В платформе 8.3.27 появилась возможность использовать WebSocket-клиент. Давайте посмотрим, как это все устроено и чем оно нам полезно.
14.01.2025 46658 dsdred 110
Механизмы платформы 1С Разработчик 1С:Предприятие 8 Бесплатно (free)
Особенности "Знач" и разбор документации к нему.
10.01.2025 26354 VAAngelov 60
Механизмы платформы 1С Разработчик Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)
Эта небольшая статья - некоторого рода шпаргалка по файловым потокам: как и зачем с ними работать, какие преимущества это дает.
23.06.2024 40353 bayselonarrend 24
1. Обязательно проверять минимальную версию платформы
2. На большой глубине стека избегать применения в частотном коде, т.к. затраты на сборку полной строки стека могут стать заметными.
добавлю свои "5 копеек" для чего это нужно - Конфигурация на поддержке и настраивается только расширениями
для каких-то общий модулей нужно реализовать принцип "тут играть, тут не играть" - со стеком вызова это сделать гораздо проще, а главное меньше приходится использовать "&ИзменениеИКонтроль"
sapervodichka, исправь в тексте для платформ с после 8.3.17
ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())Интересен диаметр глаз кодера, который потом наткнется на этот код, когда будет разбирать ситуацию с тем что "восстановление последовательности зафигачило" закрытие пятилетней давности.
Стек вызово это ИМХО аналитический инструмент.
Не расширения воротить надо по каждому поводу, а просто внимательно и вдумчиво отлаживаться.
Никогда ваши публикации не считал "дурака пишу", наоборот, они дельные, толковые и грамотные. Но конкретна эта - провокационна.
Извните, но это будет палочкой нафигвселомалочкой через полгода, когда все "срочные" отчеты уже сданы и забыты. А вот сейчас надо опять что-то сдать/заплатить.
Не надо апеллировать тем что это "временное" решенение, мы все знакомы с законом синей изоленты ;)
1. Обязательно проверять минимальную версию платформы
2. На большой глубине стека избегать применения в частотном коде, т.к. затраты на сборку полной строки стека могут стать заметными.
1. как выше писали это костыли и притом неявные, другой разработчик не будет подозревать, что система так себя может вести
2. нельзя надеяться на то что и завтра "ЗакрытиеМесяцаСервер.Выполнить_ФормированиеЗаписейКнигПокупокИПродаж" будет так же называться
3. нельзя надеяться на то что формируемая строка в ПодробноеПредставлениеОшибки будет такого же формата, да и к тому же думаю она там малость и на разных языках может формироваться
я в своей практике стараюсь не опираться на жиденькие конструкции
а в последнее время блин превратился в бесплатного дебаггера ERP... писец качество продукта под номером 2.4.12.75 ... пока пытаешься воспроизвести одну ошибку, по пути еще пару находишь
Вот сегодня новая встретилась в заказе клиента, Онлайн взаиморасчеты...
по причине:
Ошибка записи! Не установлен отбор по регистратору (Регистр сведений: Отражение документов в регл учете)
{ОбщийМодуль.ПроведениеСерверУТ.Модуль(433)}: Объект.Движения.Записать();
{Документ.ЗаказКлиента.МодульОбъекта(868)}: ПроведениеСерверУТ.ЗаписатьНаборыЗаписей(ЭтотОбъект);
по причине:
Ошибка при выполнении обработчика - 'ПриЗаписи'
по причине:
Ошибка записи! Не установлен отбор по регистратору (Регистр сведений: Отражение документов в регл учете)
{ОбщийМодуль.РеглУчетПроведениеСервер.Модуль(912)}: НаборЗаписей.Записать();
{ОбщийМодуль.РеглУчетПроведениеСервер.Модуль(1855)}: ВернутьДокументыКОтражению(МенеджерВременныхТаблиц);
{ОбщийМодуль.ОперативныеВзаиморасчетыСервер.Модуль(1259)}: РеглУчетПроведениеСервер.ЗарегистрироватьДокументыРасчетовСПартнерамиКОтражениюВРеглУ
{ОбщийМодуль.ОперативныеВзаиморасчетыСервер.Модуль(1482)}: ЗаполнитьОперативныеВзаиморасчеты(ОсновныеПараметры);
{РегистрНакопления.РасчетыСКлиентами.МодульНабораЗаписей(631)}: ОперативныеВзаиморасчетыСервер.РассчитатьПоИзменениям(Запрос.МенеджерВременныхТаблиц, Истина, Отбор.Регистратор.Значение, ДополнительныеСвойства);
{ОбщийМодуль.ПроведениеСерверУТ.Модуль(433)}: Объект.Движения.Записать();
{Документ.ЗаказКлиента.МодульОбъекта(868)}: ПроведениеСерверУТ.ЗаписатьНаборыЗаписей(ЭтотОбъект);
по причине:
Ошибка записи! Не установлен отбор по регистратору (Регистр сведений: Отражение документов в регл учете)
Выпускать в релиз такое решение без соответствующей изоляции и документирования чреват более серьезными проблемами, особенно в условиях коллективной разработки.
А этого более чем достаточно (именно для этого и используется стек вызовов). Автор красавчик.
Масштабировать такие решения, наверное, будет не совсем правильно. А, в связи с этим, и проверять минимальную версию платформы не обязательно - вероятность отката платформы для продуктовых баз невелика...
Но.... надо понимать, что 1С постоянно тусует код типовых конфигураций - от чего названия модулей и процедур может меняться (полный путь) - а тут как раз идёт его анализ. Это не есть хорошо! Поэтому - тут тогда лучше делать всегда конкретные условия на ветки ветвления - без секции "Иначе" - вернее с ней - в неё должна быть генерация исключения - что ветка условия Вышла за границы условия и программисту нужно его пересмотреть!
Ну а я, всё-таки за то, чтобы передавать доп параметры через внешние переменные (обычно - параметры сеанса для управляемых приложений). Это куда надёжнее - заводишь такую переменную (параметр сеанса) типа "Соответствие"("ФиксированноеСоотвествие"), парой общих функций помещаешь и извлекаешь оттуда доп параметры для конкретной вложенной функции (по её имени, аргументу, и, возможно, дополнительной текстовой пометке-ограничению).
А вообще - для решения таких задач есть АОП - жаль в 1С его нет (хотя сами расширения - вообще-то это уже АОП - вот только очень ограниченный) - не хватает в 1С продвинутого АОП, очень не хватает...
Ну а данной статье очень не хватает приложения како-нибудь функции алгоритма - для продвинутого и чёткого разбора текста стека - а то как-то использовать функцию "Найти" по месту вызова - совсем не кошерно!
-8<---------------------
Описание:
Возвращает строку, аналогичную той, что показывается в стандартном диалоге платформы "1С:Предприятие", вызываемом при нажатии кнопки "Подробно" из сообщения об ошибке.
.......
Не рекомендуется использовать, начиная с версии 8.3.17.
Описание изменено в версии 8.3.17.
-8<---------------------
Подозреваю, что 1С сознательно не дает программистам смотреть стек. А очень нужно, т.к. у меня например исключения шлются в виде запросов в helpdesk и было бы очень не плохо, чтобы разрабы там сразу видели стек, а не просто ошибку.
Я как бы понимаю, что надо лучше отлаживать, но вот беда. Внешние сервисы, а-ля маркетплейсов типа Озона очень любят менять API без предупреждения.
Но я как бы понимаю, что вопрос не к вам, так что могу просто посетовать, что жаль такую возможность прикрыли
Конечно, использовать надо крайне осторожно, но об этом уже и так достаточно наговорили.
По мне, так это крайне удивительно, что фактически 1С во время исполнения кода всегда хранит стек вызовов, но адекватного метода обращения к нему платформа не предоставляет... Почему, спрашивается?! 0_о
Однако, обнаружил, что метод ПодробноеПредставлениеОшибки(ИнформацияОбОшике()) может не выдавать полный стек. При этом, если убрать конструкцию Попытка-Исключение в режиме Предприятия по кнопке "Подробно" и в журнале регистрации по той же самой ошибке отображается полный стек.
У кого-нибудь есть идеи отчего такое может быть? И как можно добиться заявленной работы метода?
1С:Предприятие 8.3 (8.3.15.1830)
Документооборот 8 КОРП, редакция 2.1 (2.1.11.5)
В приведенном коде данный метод выдает только саму строку с ошибкой без полного стека вызовов:
Попытка
Тест = ЗаявкаСсылка.Автор;
Исключение
Конфигурация = СтрШаблон("%1 (%2)", Метаданные.Имя, Метаданные.Версия);
ВремяВозникновения = ТекущаяДатаСеанса();
ОписаниеОшибки = ОписаниеОшибки();
ПодробноеПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
Сообщить( "В процессе отправки уведомления заявителю или проведения документа возникла ошибка.
|Сообщите администратору нижеприведенное описание ошибки.");
Сообщить(СтрШаблон( "Конфигурация: %1.
|Время возникновения: %2.
|Описание ошибки:
|%3.
|Подробное представление ошибки:
|%4.",
Конфигурация, ВремяВозникновения, ОписаниеОшибки, ПодробноеПредставлениеОшибки));
КонецПопытки;
ПоказатьПеременная ПодробноеПредставлениеОшибки принимает следующее значение:
"Поле объекта не обнаружено (Автор)
{MY ОбщийМодуль.GV_ЗаявкиНаКорректировкуСтока.Модуль(168)}: Тест = ЗаявкаСсылка.Автор;"
Сообщение, кнопка "Подробно" и событие в журналие регистрации представлены на скриншотах.
попробуй строчку
ПодробноеПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());Протестируйте в клиент-серверном варианте.
Будет не весь стек. Потратили на это кучу времени и получили кучу проблем.
Использовать получение стека через ИнформацияОбОшибке() можно только в файловой базе
Контекста клиента нет.
Правда у меня был такой код:
Попытка
а = 0/0;
Исключение
Инфо = ИнформацияОбОшибке();
Сообщить(НСтр("ru='Описание=';en='Description='") + Инфо.Описание + "'");
Сообщить(НСтр("ru='ИмяМодуля=';en='ModuleName='") + Инфо.ИмяМодуля + "'");
Сообщить(НСтр("ru='НомерСтроки=';en='LineNumber='") + Инфо.НомерСтроки + "'");
Сообщить(НСтр("ru='ИсходнаяСтрока=';en='SourceLine='") + Инфо.ИсходнаяСтрока + "'");
КонецПопытки; ПоказатьСейчас попробовал вставить вместо ИнформацияОбОшибке эту функцию:
Попытка
а = 0/0;
Исключение
Инфо = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
Сообщить(Инфо);
КонецПопытки;
Получил на клиенте:
Деление на 0
{(2)}: а = 0/0;
{ВнешняяОбработка.КонсольКода.Форма.Форма.Форма(40)}: Выполнить(ТекстДляВыполнения);
{ВнешняяОбработка.КонсольКода.Форма.Форма.Форма(60)}: ВыполнитьНаКлиенте();
На сервере:
Деление на 0
{(2)}: а = 0/0;
{ВнешняяОбработка.КонсольКода.Форма.Форма.Форма(13)}: Выполнить(ТекстДляВыполнения);
Ок, хороший метод, раньше я копал в вером направлении но не нагуглил эту функцию, спасибо
Кроме уже названной (что при вызове на сервере не виден клиентский стек), ПодробноеПредставлениеОшибки и ОбработкаОшибок.ПодробноеПредставлениеОшибки возвращает пустой стек, если метод вызван внутри модуля с установленным паролем или в поставке без коде.
добавлю свои "5 копеек" для чего это нужно - Конфигурация на поддержке и настраивается только расширениями
для каких-то общий модулей нужно реализовать принцип "тут играть, тут не играть" - со стеком вызова это сделать гораздо проще, а главное меньше приходится использовать "&ИзменениеИКонтроль"
sapervodichka, исправь в тексте для платформ с после 8.3.17
ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())Когда статья вышла в 2020 г - я прочитал и забыл. Я вообще - а с тех пор уж 5 лет прошло - глубоко не изучал Попытку-Исключение. Такие механизмы редко кто на постоянке изучает....
Но тогда, когда впервые я ознакомился со статьей, я оценил ваше изощренное и виртуозное владение кодом 1С.
Сегодня , решая задачу поиска ошибки ЭДО, приходится углубляться в тему попыток-исключений, транзакций, отлова и анализа ошибок.
Перечитал вашу статью - да , еще раз , спасибо за нестандартный прием!
Редкие люди обладают талантом находить и применять нестандартные приемы. :)
Теперь пару нюансов:
- вот здесь рекомендовано п.3.1
- вот здесь п. 1.4.3
то есть если мы поднимаемся выше по стеку с помощью ВызватьИСключение, а там выше срабатывает снова проверка на дату запрета для формирования книги покупки при закрытии месяца - то вам придется снова разделять потоки - и отдельно обрабатывать полный текст ошибки и отдельно обрабатывать исключения....
....сложно и мудрено все.....ну а так, да, уже не решаем задачу поиска ошибок , а как будто готовимся к Эксперту 1С - так много нюансов на такую маленькую голову 1сника падает....
А вот это можете пояснить?
я вот тут читаю правила применения транзакций:
в ходе выполнения транзакции все изменения в базе данных записываются в журнал транзакций, что необходимо для возможности откатить транзакцию;
блокировки, установленные в транзакции, остаются до конца транзакции;
на сервере 1С:Предприятия блокировки занимают оперативную память;
другие ресурсы, необходимые самой бизнес-логике, которая выполняется в транзакции.
Все это в целом может снижать эффективность использования ресурсов.
Про транзакции как будто все понятно - применять их надо вдумчиво.
А что с попыткой-исключением? Что значит "затратный по времени механизм"?
Рейтинг: 7634
Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 1263068
Создание 12.07.20 19:00
Обновление 14.10.22 22:45
Просмотры 29472
Загрузки 0
Рейтинг
116
Комментарии 66
Код открыт Да
Рубрики Механизмы платформы 1С
Кому Разработчик
Тип файла Нет файла
Платформа 1С:Предприятие 8
Конфигурация 1C:Бухгалтерия
Операционная система Не имеет значения
Страна Не имеет значения
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Бесплатно (free)