В процессе работы с конфигурацией «Торговля и Склад 9.2» на платформе 1С 7.7 часто возникает необходимость получить плоский список всех товаров с их штрихкодами. Основная сложность заключается в архитектуре хранения данных: штрихкод в этой версии не является реквизитом самого справочника Номенклатура. Рассмотрим детально, как устроена эта связь, и разберем несколько эффективных способов решения задачи — от простого программирования до использования универсальных типовых инструментов.
Прежде всего, проанализируем ситуацию с точки зрения метаданных. В ТиС 9.2 штрихкод привязан к конкретной единице измерения. Это логично, так как у одного и того же товара (например, минеральной воды) может быть штрихкод на бутылку (штуку) и отдельный штрихкод на упаковку (коробку). Таким образом, справочник ЕдиницыИзмерения является подчиненным по отношению к справочнику Номенклатура.
Когда мы открываем список единиц измерения из карточки товара, система автоматически устанавливает фильтр по владельцу. Чтобы увидеть все штрихкоды сразу, этот фильтр необходимо обойти. Выясним, как это сделать наиболее эффективно.
Если у вас есть доступ к конфигуратору, самым быстрым способом будет создание небольшой внешней обработки. Посмотрим на пример кода, который перебирает справочник ЕдиницыИзмерения и выводит данные в таблицу. Основная идея здесь — перебор подчиненного справочника напрямую, без привязки к конкретному владельцу в цикле.
Разберем алгоритм по шагам:
Таблица для формирования печатной формы.ЕдиницыИзмерения.Владелец, чтобы получить наименование товара.
Т = СоздатьОбъект("Таблица");
Спр = СоздатьОбъект("Справочник.ЕдиницыИзмерения");
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент() = 1 Цикл
// Проверяем наличие штрихкода, чтобы не выводить пустые строки
Если ПустаяСтрока(Спр.ШтрихКод) = 0 Тогда
ТоварНаименование = Спр.Владелец.Наименование;
ШтрихКодЗначение = Спр.ШтрихКод;
// Здесь предполагается, что в макете создана секция "Строка"
// с переменными ТоварНаименование и ШтрихКодЗначение
Т.ВывестиСекцию("Строка");
КонецЕсли;
КонецЦикла;
Т.ТолькоПросмотр(1);
Т.Показать("Список штрихкодов");
Важный нюанс: при таком подходе одна и та же номенклатура может встретиться в списке несколько раз, если у нее задано несколько единиц измерения (например, "шт" и "пог. м") и для каждой прописан свой код. Если вам нужен только один (основной) код, в цикл необходимо добавить условие проверки: Спр.Ссылка = Спр.Владелец.ОсновнаяЕдиница.
Если вы не хотите писать код, рассмотрим использование штатных средств платформы 1С 7.7. В комплекте поставки конфигураций часто идет внешняя обработка Univers.ert (Универсальная печать справочников). Она позволяет выводить данные практически любого справочника в удобном виде.
Проанализируем порядок действий:
ExtForms вашей базы).Единицы измерения.Владелец (это и есть ваша Номенклатура) и поле Штрихкод.Этот метод хорош тем, что полученную таблицу можно легко сохранить в формат Excel через стандартную функцию 1С Файл — Сохранить как....
Рассмотрим ситуацию, когда список штрихкодов нужен не как техническая выгрузка, а как дополнение к прайс-листу. В ТиС 9.2 есть встроенный отчет «Печать прайса». Чтобы добавить туда штрихкод, выполним следующие действия:
ТекстШК = Запрос.Номенклатура.БазоваяЕдиница.ШтрихКод;.Это позволит пользователям получать штрихкоды в привычном интерфейсе без использования сторонних инструментов.
Для продвинутых пользователей существует инструмент UChoice. Это мощная обработка для произвольного поиска и выбора объектов. С её помощью можно выставить фильтр по справочнику ЕдиницыИзмерения с условием Штрихкод <> "" (не пустой). В результате вы получите таблицу значений (ТЗ), содержащую колонки «Владелец» и «Штрихкод», которую можно вывести на печать или скопировать в буфер обмена.
При работе со штрихкодами в 1С 7.7 стоит учитывать несколько критически важных моментов, которые могут повлиять на корректность данных:
1. Контрольное число: В версии 7.7 штрихкоды часто вводились вручную. При выгрузке списка полезно добавить проверку на соответствие стандарту EAN-13. Если длина кода меньше или больше 13 символов (за исключением весовых кодов), такой штрихкод может не считаться сканером в другой системе.
2. Визуализация (печать «зебры»): Если ваша задача — не просто получить цифры, а распечатать список для сканирования, простого вывода текста будет недостаточно. Для отображения графических полос в системе должна быть установлена внешняя компонента 1CBarCod.dll или специализированный шрифт типа EanBwrP36TT. В коде это реализуется через вставку объекта «Рисунок» в секцию таблицы и установку его типа как «Штрих-код».
3. Работа с SQL-версией: Если ваша база работает на MS SQL Server и объем номенклатуры превышает 50-100 тысяч позиций, стандартный перебор справочника в цикле 1С может занять значительное время. В этом случае эффективнее использовать прямой SQL-запрос к таблицам sc... (справочник номенклатуры) и sc... (справочник единиц), соединив их по полю PARENTEXT. Это позволит получить результат мгновенно.
4. Лайфхак без программирования: В некоторых случаях (если программный код формы списка это позволяет) можно зайти в справочник единиц измерения, нажать кнопку «Действия» и попробовать снять флаг «Иерархический список» или «Отбор по владельцу». Если разработчики конфигурации не заблокировали эту возможность программно, вы увидите общий список всех единиц всех товаров. После этого достаточно настроить видимость колонок и нажать Ctrl+C / Ctrl+V для переноса данных в таблицу.
Подводя итог, выбор метода зависит от ваших навыков и целей. Для разовой выгрузки идеально подходит универсальная печать справочников, а для регулярного использования в учетном процессе лучше один раз дописать несколько строк кода в отчет или создать отдельную обработку.