Для некоторых категорий, например, для антисептиков, при заказе кодов маркировки через Документ.ЗаказНаЭмиссиюКодовМаркировкиСУЗ (далее "Заказ"), обязательным является и Документ.МаркировкаТоваровИСМП (далее "Маркировка"). При передаче Маркировки в ИС МП, из РегистрыСведений.ПулКодовМаркировкиСУЗ (далее "Пул") удаляются заказанные ранее коды. Так же, передача Маркировки является подтверждением нанесения кодов на товар.
Иногда случается, что уже распечатанные из Заказа коды могут потеряться, повредиться или быть наклеены неправильно (не туда). Если к этому моменту уже был передан документ Маркировка, то придётся заказывать новые небесплатные коды.
При попытке снова распечатать коды, вы увидите сообщение вида "По заказу "Заказ на эмиссию кодов маркировки СУЗ ХХХХХХ от ХХХХХХХХ" коды маркировки отсутствуют. Возможно, коды уже введены в оборот и удалены из пула."
Чтобы избежать этого, достаточно не позволять программу удалять коды из Пула.
Сделать это можно, например, добавлением в расширение метода ОчисткаПулаКодовМаркировкиПоОтчетуОНанесении (с аннотацией &Вместо) из модуля менеджера упомянутого выше регистра сведений; а потом закомментаровав строку "ПродолжитьВызов(КодыМаркировки);".
Должно получиться примерно так:
&Вместо("ОчисткаПулаКодовМаркировкиПоОтчетуОНанесении")
Процедура МаркХ_ОчисткаПулаКодовМаркировкиПоОтчетуОНанесении(КодыМаркировки)
// Вставить содержимое метода.
//ПродолжитьВызов(КодыМаркировки);
КонецПроцедуры
Ещё, иногда, может потребоваться вывести из Заказа полные коды маркировки (с криптохвостом), например, для передачи их за пределы вашей базы 1С, с целью печати этикеток. Можно, конечно, вывести печать в PDF, но это не всегда и не всем удобно.
Вывести полные коды можно следующим кодом:
&НаКлиенте
Процедура МаркХ_ВывестиКодыМаркировкиВместо(Команда)
Если Объект.Ссылка = ПредопределенноеЗначение("Документ.ЗаказНаЭмиссиюКодовМаркировкиСУЗ.ПустаяСсылка") Тогда
Сообщить("Печать возможна только для записанных документов");
Возврат;
КонецЕсли;
ПолныеКодыМаркировки = МаркХ_ПолныеКодыМаркировкиНаСервере();
Если ПолныеКодыМаркировки = Неопределено Тогда
ПоказатьОповещениеПользователя(,, "Нет данных для вывода");
Возврат;
КонецЕсли;
// В текущем виде, восстановленная строка содержит символ GS1.
// Если необходимо от этих символов избавиться, то следует раскомментировать ближайшие две закомментированные строки.
//РазделительGS1 = МенеджерОборудованияМаркировкаКлиентСервер.РазделительGS1();
ТекстДок = Новый ТекстовыйДокумент;
Для Каждого Элемент Из ПолныеКодыМаркировки Цикл
СтрокаШК = ШтрихкодированиеОбщегоНазначенияИСКлиентСервер.Base64ВШтрихкод(Элемент);
//СтрокаШК = СтрЗаменить(СтрокаШК, РазделительGS1, "");
ТекстДок.ДобавитьСтроку(СтрокаШК);
КонецЦикла;
ТекстДок.Показать(Объект.Номер);
КонецПроцедуры
&НаСервере
Функция МаркХ_ПолныеКодыМаркировкиНаСервере()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РегСв.ПолныйКодМаркировки КАК ПолныйКодМаркировки
|ИЗ
| РегистрСведений.ПулКодовМаркировкиСУЗ КАК РегСв
|ГДЕ
| РегСв.ЗаказНаЭмиссию = &ЗаказНаЭмиссию";
Запрос.УстановитьПараметр("ЗаказНаЭмиссию", Объект.Ссылка);
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
Возврат Неопределено;
Иначе
Массив = Новый Массив;
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
Массив.Добавить(Выборка.ПолныйКодМаркировки);
КонецЦикла;
Возврат Массив;
КонецЕсли;
КонецФункции
В прикреплённом расширении всё это уже сделано. Проверял на УТ 11.5.17.151. Скорее всего будет и на ERP работать.
В заметно более ранних версиях, имя модуля ШтрихкодированиеОбщегоНазначенияИСКлиентСервер может быть другим, но схожим по названию. В таком случае определяйте необходимый модуль путём поиска метода Base64ВШтрихкод.