18 марта 2021 г.

Напоминалочка про 1С

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

Пост не преследует цели кого-то чему-то научить или похвастаться навыками. Наоборот — это краткий сборник-напоминалка как не тупить в простых ситуациях. Что-то типа книжки Простые секреты разработки, только самописной про то, что важно мне. Если будет полезно кому-то ещё, я буду рад.

#1С

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

Значение не является значением объектного типа (ПараметрыПрописиНаРусском)

Источник этой ошибки живёт в строке подобной такой:

ОбластьМакета.Параметры.ИтоговаяСтрока = "Всего оказано услуг на сумму: " ОбщегоНазначения.СформироватьСуммуПрописью(СуммаКПрописи, мВалютаРегламентированногоУчета);

В отладчике это место найдётся быстро, и мы сможем увидеть, что мВалютаРегламентированногоУчета имеет значение Неопределено. Чтобы победить достаточно включить в состав обработки строку:

мВалютаРегламентированногоУчета = Константы.ВалютаРегламентированногоУчета.Получить();

Конкретное наименование константы или другого источника данных надо смотреть по месту в конкретной конфигурации.

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

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

Функция Печать (ИмяМакета, КоличествоЭкземпляров = 1, НаПринтер = Ложь) Экспорт

Тут надо определиться: либо мы где-то заранее определяем ИмяМакета или мы должны его сразу прописать в параметрах:

Функция Печать (ИмяМакета = "М2_печать", КоличествоЭкземпляров = 1, НаПринтер = Ложь) Экспорт

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

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

3. Или вот ещё прекрасное: при входе в базу с ровного места начинает ругаться. 

Ошибка SDBL:
Таблица или поле ConfigVersion не содержится в разделе FROM

В конфигуратор пускает, а в пользовательский режим — нет. Часто такая ошибка возникает когда базу сохранили из-под одной версии платформы, а потом загрузили под другой. Пока вы не потратили время на всевозможные тестирования базы, просто сохраните её в .dt средствами самой 1С, а потом загрузите обратно. Вероятнее всего ошибка уйдёт.

Комментариев нет:

Отправить комментарий