Переход на новые релизы платформы «1С:Предприятие» — это всегда ответственный шаг, который нередко преподносит неприятные сюрпризы разработчикам и системным администраторам. Ветвь 8.3.16 (в особенности релизы 8.3.16.1030 и 8.3.16.1063) запомнилась сообществу целым рядом критических багов. Среди них: некорректный расчет остатков по регистраторам в Системе компоновки данных (СКД), прекращение работы печати штрихкодов и проблемы с отображением форм.
В этой статье мы подробно разберем причины возникновения данных неполадок и рассмотрим практические способы их обхода и полного устранения.
---
Выясним причину странного поведения отчетов, использующих СКД, после обновления на релизы 8.3.16.1030/1063. Пользователи начали замечать, что типовые и доработанные отчеты (например, «Товары на складах») при группировке по полям Период или Регистратор выводят неверные данные — остатки просто суммируются по строкам, превращая отчет в хаос.
Почему это происходит?
В версии 8.3.16 разработчики 1С глубоко модернизировали механизм трансляции запросов из СКД в СУБД для оптимизации производительности. Однако это привело к критической ошибке: если в схеме компоновки данных используются виртуальные таблицы остатков (или остатков и оборотов), помещенные во временные таблицы (ВТ) или объединенные через оператор ОБЪЕДИНИТЬ, СКД «теряет» роли полей. Платформа перестает понимать, что перед ней остатки на границу периода, и выполняет банальное математическое суммирование по всем записям группировки.
Разберем по шагам, как мы можем решить эту проблему без отката на старые платформы:
Рассмотрим пример нерекомендуемой структуры запроса:
ВЫБРАТЬ
ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
ТоварыНаСкладахОстатки.ВНаличииОстаток КАК Остаток
ПОМЕСТИТЬ ВТ_ОстаткиТоваров
ИЗ
РегистрНакопления.ТоварыНаСкладах.Остатки(&Период, ) КАК ТоварыНаСкладахОстатки
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ_ОстаткиТоваров.Номенклатура,
ВТ_ОстаткиТоваров.Остаток
ИЗ
ВТ_ОстаткиТоваров КАК ВТ_ОстаткиТоваров
Рекомендуется избавиться от промежуточной ВТ и получать данные напрямую:
ВЫБРАТЬ
ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
ТоварыНаСкладахОстатки.ВНаличииОстаток КАК Остаток
ИЗ
РегистрНакопления.ТоварыНаСкладах.Остатки(&Период, ) КАК ТоварыНаСкладахОстатки
ПериодСекунда, ПериодДень и Регистратор обязательно установим роль «Период» с указанием их иерархии (порядкового номера).---
Вторая популярная проблема при переходе на 8.3.16 — внезапное исчезновение или отказ печати штрихкодов в таких конфигурациях, как «Управление производственным предприятием» (УПП) или «Управление торговлей 10.3». Штрихкоды, которые раньше добавлялись в печатные формы через OLE-объекты, перестают выводиться на печать.
Причина сбоя:
Исторически для генерации штрихкодов использовалась внешняя библиотека 1C:Barcode Printing (1CBarCode.dll), зарегистрированная в системе как элемент управления ActiveX. Начиная с платформы 8.3.16, поддержка технологии ActiveX была существенно урезана. Более того, 64-битный клиент «1С:Предприятия» физически не способен взаимодействовать с 32-битным ActiveX-компонентом, что приводит к ошибкам при формировании табличных документов на стороне сервера.
Рассмотрим варианты исправления ситуации:
Посмотрим на пример кода, который заменяет использование старой ActiveX-компоненты на работу со встроенным механизмом платформы:
// Пример программного добавления штрихкода в область макета без ActiveX
ОбластьМакета = Макет.ПолучитьОбласть("ОбластьШтрихкода");
РисунокШтрихкода = ОбластьМакета.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Штрихкод);
РисунокШтрихкода.Верх = 2;
РисунокШтрихкода.Лево = 2;
РисунокШтрихкода.Ширина = 60;
РисунокШтрихкода.Высота = 15;
// Настройка параметров штрихкода средствами платформы
РисунокШтрихкода.Объект.ТипКода = 4; // Например, EAN13
РисунокШтрихкода.Объект.Сообщение = "4601234567890";
РисунокШтрихкода.Объект.ОтображатьТекст = Истина;
---
Переход на 8.3.16 принес пользователям обычных (неуправляемых) форм сильный визуальный дискомфорт: постоянное мерцание табличных частей при прокрутке, самопроизвольное сжатие («скукоживание») диалоговых окон и проблемы в работе встроенного Конструктора запросов.
Почему это происходит?
Эти графические артефакты связаны с доработкой в платформе механизма масштабирования под экраны с высоким разрешением (High-DPI) и изменением алгоритмов отрисовки окон Windows.
Проанализируем возможные методы устранения графических сбоев:
C:\Program Files\1cv8\имя_релиза\bin\).1cv8.exe, нажмите на него правой кнопкой мыши и выберите «Свойства».Таким образом, мы детально разобрали основные проблемы релизов 1С 8.3.16 и выработали пошаговые алгоритмы для их ликвидации. Своевременный переход на исправленные версии платформы и отказ от устаревших технологий ActiveX позволят вашим базам данных работать быстро и без сбоев.