Каталог решений - Как распечатать одну транспортную накладную, а не десять, как это предлагают типовые 1С: УТ 11.5 и КА 2.5? Исправление проблемы печати

Как распечатать одну транспортную накладную, а не десять, как это предлагают типовые 1С: УТ 11.5 и КА 2.5? Исправление проблемы печати

Как распечатать одну транспортную накладную, а не десять, как это предлагают типовые 1С: УТ 11.5 и КА 2.5? Исправление проблемы печати

В наличии

В современных типовых конфигурациях на базе 1С: Управление торговлей обнаружилась необычная проблема. При печати документа Транспортная накладная в случаях, когда в списке оснований встречается документ (или несколько), который в свою очередь является основанием для другой транспортной накладной (или нескольких), то вместо одной накладной выводятся все связанные с основанием накладные. Разъясняется причина такого поведения печати и предлагается способ исправления.

Категория:

Описание

Описание проблемы

В статье речь идет о проблемах с печатью документа Транспортная накладная. Возможность оформления данных документов управляется соответствующей функциональной опцией – раздел Продажи.

 

 

Рассмотрим проблему печати на примере.

Имеется Транспортная накладная № 1, основанием к которой является Реализация товаров и услуг 1.

 

 

Имеется также Транспортная накладная № 2, основанием к которой является Реализация товаров и услуг 1 и, например, Реализация товаров № 2.

 

 

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

У документа Транспортная накладная предусмотрено 2 типовых печатных формы Транспортная накладная (Приложение №4 к Правилам перевозок грузов автомобильным транспортом) и Товарно-транспортная накладная (Типовая межотраслевая форма № 1-Т)

Но при формировании печатной формы из ОДНОГО из документов (в нашем примере №1 или №2)  к печати подготавливаются печатные формы одновременно ДВУХ (или большего количества) документов (в нашем примере №1 и №2).

 

 

Такая ситуация является нештатной, поскольку, повторюсь, запрашивался к печати только один из документов Транспортная накладная.

Указанная проблема выявляется для обоих видов печатных форм, при формировании по кнопке как из формы документа, так и из формы списка документов.

 

Исправление

Поскольку детальное исследование причин возникновения такой проблемы не будет интересно всем читателям, сразу скажу, что для исправления достаточно подключить небольшое расширение (назначение — Исправление). Может работать в безопасном режиме, то есть возможность применить это исправление и в 1С ФРЕШ.

 

Причины возникновение проблемы

Мне удалось выяснить, что причина такого нештатного поведения системы, в неправильном использовании входных переменных в следующей функции модуля менеджера документа ТранспортнаяНакладная:

Функция ПроверитьДокументыОснования(ПроверяемыеОбъекты, ВыделенныеСтрокиАдресов = Неопределено, ВыдаватьСообщения = Истина) Экспорт

Целью данной функции является формирование на выходе структуры(коллекции значений) результата, содержащей следующие ключи:

ОбъектыПоКоторымМожноИНужноСоздатьТранспортныеНакладные

ОбъектыПоКоторымСоздаватьТранспортныеНакладныеНельзя

ОбъектыПоКоторымНакладныеУжеСозданы

ЗаданияНаПеревозкуДляСозданияТранспортныхНакладных ЗаданияНаПеревозкуПоКоторымНакладныеУжеСозданы

 

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

А проблема совсем в другом.

Во входной параметр ПроверяемыеОбъекты в виде ссылки передается массив объектов печати (в понимании массива объектов всех процедур печати при использовании БСП). Заметим, что переменная передается, по ссылке, а не по значению!

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

МассивОбъектов       = ПроверяемыеОбъекты;

Напомню, что при этом новый массив не создается, а новая переменная лишь привязывается к существующим данным массива.

Далее в коде проводится обработка данных массива, включая такую операцию:

МассивОбъектов.Очистить();

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

Достаточно было бы входную переменную было бы претворить выражением ЗНАЧ, такой бы проблемы не возникало:

Функция ПроверитьДокументыОснования(Знач ПроверяемыеОбъекты, ВыделенныеСтрокиАдресов = Неопределено, ВыдаватьСообщения = Истина) Экспорт

Возможно, возникает вопрос, почему проблема проявляется не всегда и вообще, как при этом хоть что-то печатается?

Кратко попробую ответить.

Данная функция, как писалось выше, на выходе формирует структуру с массивами документов-оснований.

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

Когда печатается только один документ, имеющий оригинальное основание (которое не встречается в других транспортных накладных), печать проходит гладко, ведь функция подобрала основание, присутствующее только в данной накладной.

Но как только попадется основание, встречающееся в двух и более транспортных накладных, все они будут выведены на печать, поскольку «обрезающая функция» в виде сопоставления с исходным списком накладных к печати не отработает.

Первоначально проблема была обнаружена в 1С: Комплексная автоматизация 2.5.8.369.

Проверялось так же на последней 1С: Управление торговлей 11.5.8.405  — проблема на месте.

Предполагаю, что проблема проявится и в последних редакциях 1C: ERP.

has been added to your cart:
Оформление заказа