Грабли и бюджетирование ERP

19.11.25

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

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

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Исправление ошибок, расширение
.cfe 53,86Kb
0 3 050 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Все ошибки и проблемы были выявлены на версии ERP 2.5.17.194. В последующих версиях этих проблем может уже и не быть.

 

Ошибка арифметического переполнения SQL.  Возникает при работе с действительно большими суммами: 

 

 

Как отследить и найти: Находите запрос, сохраняете его со всеми параметрами, потом урезаете пошагово запрос до того момента, пока ошибка не исчезнет.  Анализируете последнее на предмет возможной конвертации типа числа.

В нашем случае ошибка возникает в  модуле БюджетированиеСервер в процедуре ПересчитатьТаблицуДанныхВВалюту. В нашем случае ошибок несколько, но одни однотипные. Ошибка в строке запроса:  ТОГДА %2 * ЕСТЬNULL(КоэффициентыПересчетаИзФункциональнойВалюты.КоэффициентПересчета, 1)  где %2 подменяется, например на СуммаВФункциональнойВалюте.  Здесь происходит неявное преобразование типа. Из виртульной таблицы в запросе мы получаем  СуммаВФункциональнойВалюте, которой сервер SQL присвоил тип Numeric,  не смотря на то, что СуммаВФункциональнойВалюте едва в него умещалась.

Но вот результат перемножения этого числа  ЕСТЬNULL(КоэффициентыПересчетаИзФункциональнойВалюты.КоэффициентПересчета, 1)  уже нельзя преобразовать  к исходному типу, хотя, внимание , мы умножаем на единицу в нашем примере. На лицо явная ошибка SQL.  Исправить ошибку SQL мы не можем, но можем в запросе указать явно нужный итоговый тип числа. Итоговое решение:

	#Удаление
	|			ТОГДА %2 * ЕСТЬNULL(КоэффициентыПересчетаИзФункциональнойВалютыСтроки.КоэффициентПересчета, 1)
	#КонецУдаления
 	#Вставка
	|			ТОГДА ВЫРАЗИТЬ(%2 КАК ЧИСЛО (25,2)) * ЕСТЬNULL(КоэффициентыПересчетаИзФункциональнойВалютыСтроки.КоэффициентПересчета, 1)
	#КонецВставки

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

 

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

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

Присмотревшись внутрь файла, вы можете увидеть там половину базы, включая склады, серии  и т.д. Дело в том, что выгрузка работает рекурсивно. Если у вас разрезы аналитики виды номенклатуры, то выгрузятся  все реквизиты видов номенклатуры, потом все реквизиты реквизитов в видах номенклатуры потом... Ну, принцип вы поняли. А если ничего из этого в приемнике не нужно? Там свои виды номенклатуры и т.д. Будем урезать осетра. В модуле ВыгрузкаЗагрузкаМоделейМеждународногоУчетаИБюджетирования  в процедуре ЗаписатьЗначениеПриНеобходимости исключим лишнее:

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

   

Проблемы с модификацией объектов подсистемы

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

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

Ошибка при загрузке:
Возможно, структура загружаемых данных не соответствует конфигурации, проверьте актуальность файла данных
{ОбщийМодуль.ВыгрузкаЗагрузкаМоделейМеждународногоУчетаИБюджетирования.Модуль(255)}: Ошибка при вызове метода контекста (ПрочитатьXML): Ошибка преобразования данных XDTO:
НачалоСвойства: {http://v8.1c.ru/8.1/data/enterprise/current-config}CatalogObject.СтатьиРасходов Форма: Элемент Тип: {http://v8.1c.ru/8.1/data/enterprise/current-config}CatalogObject.СтатьиРасходов:Ошибка преобразования данных XDTO:
НачалоСвойства: {http://v8.1c.ru/8.1/data/enterprise/current-config}НСИ_ГУИД Форма: Элемент Тип: {http://www.w3.org/2001/XMLSchema}anyType

 

Ошибка возникает в строке ЗаписанноеЗначение = Сериализатор.ПрочитатьXML(ЧтениеXML), где видно, что мы пытаемся прочитать объект, согласно модели, которая ничего не знает о новых общих реквизитах. Слава богу, что эти объекты выгружаются через брокер и их можно не выгружать через файл.

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

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

 

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

Проверено на следующих конфигурациях и релизах:

  • 1С:ERP Управление предприятием 2, релизы 2.5.17.194

Вступайте в нашу телеграмм-группу Инфостарт

См. также

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

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

11.08.2025    3074    user1988284    0    

17

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

Каждый, кто работал с кадровыми отчетами в ЗУП, ERP или УХ, сталкивался с механизмом представлений – странным кодом запроса, где поля отображаются пустыми ссылками, а в названии временной таблицы есть слово «Представление». В статье разберем, что такое представления и как ими пользоваться. Больше не нужно ломать голову над тем, откуда и как правильно получать данные. Механизм представлений сделает это за вас.

08.07.2025    7921    user2012581    54    

55

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

В типовых решениях типа УТ, КА, ERP при вводе строк в поля ввода осуществляется поиск по первым символам. С помощью небольшой доработки (делается через расширение) можно организовать поиск по вхождению.

02.06.2025    1766    lkey    2    

5

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

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

12.05.2025    4612    AlexeyPROSTO_1C    2    

18
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. RustIG 1931 19.11.25 09:52 Сейчас в теме
В лого изображен светлый конец пути. Я думаю, весеннее колхозное поле и пару торчащих задниц с лопатами и граблями будет еще лучше. Каждый год надо полоть и убирать поле, каждый год новые грабли...
2. milkers 3003 19.11.25 19:21 Сейчас в теме
(2) Не все так мрачно, у нас хороший аналитик, с ним внедрение идет очень быстро и почти без проблем. Конечно, проблем хватает, но это рутина и не занимает много времени.
Для отправки сообщения требуется регистрация/авторизация