Печать документов с добавлением штрих-кодов
Братья и сестры! Такая дилемма: в общем надо организовать распечатку документов 1С 8.2 с штрих-кодами.
Если конкретнее, то получается так:
Имеется компания. Она обслуживает множество других компаний. И естественно вокруг этого крутится масса документов. Нашему бухгалтеру-менеджеру уж очень не удобно вручную искать эти документы у себя в базе. А вот если бы каждый документ был бы промаркерован штрих-кодом, то это существенно бы облегчило дело! Поэтому необходимо осуществить для начала печать документов с присвоением, где-нибудь в верхней части, штрих-кода(как заполнять штрих-код вопросов нет, к каждому разряду (к примеру EAN13) присвоит номер дока, дату и тд.).
Приветствуется любая помощь, буду благодарен полезным ссылкам на очень содержательную инфу. А то и так сам уже не первый день лажу, а толку как об стенку.
Если конкретнее, то получается так:
Имеется компания. Она обслуживает множество других компаний. И естественно вокруг этого крутится масса документов. Нашему бухгалтеру-менеджеру уж очень не удобно вручную искать эти документы у себя в базе. А вот если бы каждый документ был бы промаркерован штрих-кодом, то это существенно бы облегчило дело! Поэтому необходимо осуществить для начала печать документов с присвоением, где-нибудь в верхней части, штрих-кода(как заполнять штрих-код вопросов нет, к каждому разряду (к примеру EAN13) присвоит номер дока, дату и тд.).
Приветствуется любая помощь, буду благодарен полезным ссылкам на очень содержательную инфу. А то и так сам уже не первый день лажу, а толку как об стенку.
По теме из базы знаний
- Класс 1С++ для программного добавления изображений/текста/ШК в таблицу
- Печать этикеток со штрих-кодами для БП 2.0
- Внешняя печатная форма для документа Перемещение товаров в магазин с розничными ценами и штрих-кодом для УТ 11.3
- QR -кодирование документов БЕЗ изменения печатных форм, с произв. алгоритмами создания QR -кода и обработки (в т.ч прикрепление сканов к документам) для УТ 11 (все), ERP 2, КА 2, Розница 2, УНФ 1.6/3.0, БП 3, ЗУП 3
- Штрих-код номенклатуры в печатной форме ТОРГ-12
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Corvus27,
Если как формировать штрихкод вопросов нет тогда в чем?
Поэтому необходимо осуществить для начала печать документов с присвоением, где-нибудь в верхней части, штрих-кода(как заполнять штрих-код вопросов нет, к каждому разряду (к примеру EAN13) присвоит номер дока, дату и тд.).
Если как формировать штрихкод вопросов нет тогда в чем?
Длинновато и кривовато, но работает.
// Создать штрих-код
Функция ПолучитьШтрихКодДокументаПоСсылке(СсылкаДокумент) Экспорт
// Тип документа
НомерДокументаМетаданные = Метаданные.Документы.Индекс(Метаданные.Документы[СсылкаДокумент.Метаданные().Имя]);
НомерДокументаМетаданные = Прав("000" + НомерДокументаМетаданные, 3);
// Год документа
ГодДокумента = СтрЗаменить(Год(СсылкаДокумент.Дата), " ", "");
// Номер документа
НомерДокумента = СсылкаДокумент.Номер;
НомерДокументаЦифры = УбратьСимволы(НомерДокумента);
ДлинаЦифр = СтрДлина(НомерДокументаЦифры);
НомерДокументаЦифры = Прав("00000000000" + НомерДокументаЦифры, 11);
// Префикс документа (8)
ПрефиксДокумента = Лев(НомерДокумента, СтрДлина(НомерДокумента) - ДлинаЦифр);
ПрефиксДокумента = ПреобразоватьПрефиксВКод(ПрефиксДокумента);
ПрефиксДокумента = Прав("00000000" + ПрефиксДокумента, 8);
// Формирование штрих-кода (2)
ШтрихКод = "" + НомерДокументаМетаданные + ГодДокумента + ПрефиксДокумента + НомерДокументаЦифры;
ШтрихКод = ДобавитьКонтрольныйСимволШК(ШтрихКод);
Возврат ШтрихКод;
КонецФункции
Функция ПреобразоватьПрефиксВКод(Префикс)
Стр = "";
Для Ном = 1 По СтрДлина(Префикс) Цикл
КодСимвола = КодСимвола(Сред(Префикс, Ном, 1)) - 1000;
Стр = Стр + Строка(КодСимвола);
КонецЦикла;
Стр = СтрЗаменить(Стр, " ", "");
Возврат Стр;
КонецФункции
Функция ДобавитьКонтрольныйСимволШК(ШтрихКод)
СуммаНечет = 0;
СуммаЧет = 0;
Для Сч = 1 По СтрДлина(ШтрихКод) Цикл
Тек = Число(Сред(ШтрихКод,Сч,1));
Если Сч%2=1 Тогда
//нечет
СуммаНечет = СуммаНечет + Тек;
Иначе
//чет
СуммаЧет = СуммаЧет + Тек;
КонецЕсли;
КонецЦикла;
КонтрольноеЧисло = Прав(Строка(10-Число(Прав(Строка((СуммаЧет*3)+СуммаНечет),1))),1);
Возврат ШтрихКод+КонтрольноеЧисло;
КонецФункции
Функция УбратьСимволы(ИсходнаяСтрока)
Стр = "";
Для Ном = 1 По СтрДлина(ИсходнаяСтрока) Цикл
КодСимвола = КодСимвола(Сред(ИсходнаяСтрока, Ном, 1));
Цифра = Сред(ИсходнаяСтрока, Ном, 1);
Если (КодСимвола >= 48 И КодСимвола <= 57) Тогда
Стр = Стр + Цифра;
КонецЕсли;
КонецЦикла;
Возврат Стр;
КонецФункции
// Получение документа по штрих-коду
Функция ПолучитьДокументПоШтрихКоду(Знач ШтрихКод) Экспорт
// Проверка
Если СтрДлина(ШтрихКод) <> 27 Тогда
Возврат Неопределено;
КонецЕсли;
// Тип документа
НомерТипаДокумента = Число(Лев(ШтрихКод, 3));
Если НомерТипаДокумента > Метаданные.Документы.Количество() Тогда
Возврат Неопределено;
КонецЕсли;
ТипДокумента = Метаданные.Документы[НомерТипаДокумента].Имя;
КоличествоСимволовНомера = Метаданные.Документы[ТипДокумента].ДлинаНомера;
ШтрихКодПечатнойФормы = Прав(ШтрихКодПечатнойФормы, СтрДлина(ШтрихКодПечатнойФормы) - 3);
// Год документа
ГодДокумента = Сред(ШтрихКод, 4, 4);
// Префикс документа (число)
ПрефиксДокумента = Сред(ШтрихКод, 8, 8);
ПрефиксДокументаТекст = "";
Для Ном = 1 По 4 Цикл
КодСимвола = Лев(ПрефиксДокумента, 2);
Если КодСимвола = "00" Тогда Продолжить; КонецЕсли;
ПрефиксДокументаТекст = ПрефиксДокументаТекст + Символ(Число(КодСимвола) + 1000);
ПрефиксДокумента = Прав(ПрефиксДокумента, СтрДлина(ПрефиксДокумента) - 2);
КонецЦикла;
// Номер документа
НомерДокумента = Сред(ШтрихКод, 16, 11);
НулиНомера = "";
НомерДокумента = Прав(НомерДокумента, КоличествоСимволовНомера - СтрДлина(ПрефиксДокументаТекст));
// Номер с префиксом
НомерСПрефиксом = ПрефиксДокументаТекст + НомерДокумента;
Запрос = Новый Запрос();
Запрос.Текст = "ВЫБРАТЬ
| ТипДокумента.Номер,
| ЕСТЬNULL(ТипДокумента.Ссылка, НЕОПРЕДЕЛЕНО) КАК Ссылка
|ИЗ
| Документ.ПеремещениеТоваров КАК ТипДокумента
|ГДЕ
| ТипДокумента.Номер = &НомерДокумента
| И ГОД(ТипДокумента.Дата) = &ГодДокумента";
Запрос.Текст = СтрЗаменить(Запрос.Текст, "ПеремещениеТоваров", ТипДокумента);
Запрос.УстановитьПараметр("ГодДокумента", Число(ГодДокумента));
Запрос.УстановитьПараметр("НомерДокумента", НомерСПрефиксом);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Возврат Выборка.Ссылка;
КонецЕсли;
Возврат Неопределено;
КонецФункции
// Создать штрих-код
Функция ПолучитьШтрихКодДокументаПоСсылке(СсылкаДокумент) Экспорт
// Тип документа
НомерДокументаМетаданные = Метаданные.Документы.Индекс(Метаданные.Документы[СсылкаДокумент.Метаданные().Имя]);
НомерДокументаМетаданные = Прав("000" + НомерДокументаМетаданные, 3);
// Год документа
ГодДокумента = СтрЗаменить(Год(СсылкаДокумент.Дата), " ", "");
// Номер документа
НомерДокумента = СсылкаДокумент.Номер;
НомерДокументаЦифры = УбратьСимволы(НомерДокумента);
ДлинаЦифр = СтрДлина(НомерДокументаЦифры);
НомерДокументаЦифры = Прав("00000000000" + НомерДокументаЦифры, 11);
// Префикс документа (8)
ПрефиксДокумента = Лев(НомерДокумента, СтрДлина(НомерДокумента) - ДлинаЦифр);
ПрефиксДокумента = ПреобразоватьПрефиксВКод(ПрефиксДокумента);
ПрефиксДокумента = Прав("00000000" + ПрефиксДокумента, 8);
// Формирование штрих-кода (2)
ШтрихКод = "" + НомерДокументаМетаданные + ГодДокумента + ПрефиксДокумента + НомерДокументаЦифры;
ШтрихКод = ДобавитьКонтрольныйСимволШК(ШтрихКод);
Возврат ШтрихКод;
КонецФункции
Функция ПреобразоватьПрефиксВКод(Префикс)
Стр = "";
Для Ном = 1 По СтрДлина(Префикс) Цикл
КодСимвола = КодСимвола(Сред(Префикс, Ном, 1)) - 1000;
Стр = Стр + Строка(КодСимвола);
КонецЦикла;
Стр = СтрЗаменить(Стр, " ", "");
Возврат Стр;
КонецФункции
Функция ДобавитьКонтрольныйСимволШК(ШтрихКод)
СуммаНечет = 0;
СуммаЧет = 0;
Для Сч = 1 По СтрДлина(ШтрихКод) Цикл
Тек = Число(Сред(ШтрихКод,Сч,1));
Если Сч%2=1 Тогда
//нечет
СуммаНечет = СуммаНечет + Тек;
Иначе
//чет
СуммаЧет = СуммаЧет + Тек;
КонецЕсли;
КонецЦикла;
КонтрольноеЧисло = Прав(Строка(10-Число(Прав(Строка((СуммаЧет*3)+СуммаНечет),1))),1);
Возврат ШтрихКод+КонтрольноеЧисло;
КонецФункции
Функция УбратьСимволы(ИсходнаяСтрока)
Стр = "";
Для Ном = 1 По СтрДлина(ИсходнаяСтрока) Цикл
КодСимвола = КодСимвола(Сред(ИсходнаяСтрока, Ном, 1));
Цифра = Сред(ИсходнаяСтрока, Ном, 1);
Если (КодСимвола >= 48 И КодСимвола <= 57) Тогда
Стр = Стр + Цифра;
КонецЕсли;
КонецЦикла;
Возврат Стр;
КонецФункции
// Получение документа по штрих-коду
Функция ПолучитьДокументПоШтрихКоду(Знач ШтрихКод) Экспорт
// Проверка
Если СтрДлина(ШтрихКод) <> 27 Тогда
Возврат Неопределено;
КонецЕсли;
// Тип документа
НомерТипаДокумента = Число(Лев(ШтрихКод, 3));
Если НомерТипаДокумента > Метаданные.Документы.Количество() Тогда
Возврат Неопределено;
КонецЕсли;
ТипДокумента = Метаданные.Документы[НомерТипаДокумента].Имя;
КоличествоСимволовНомера = Метаданные.Документы[ТипДокумента].ДлинаНомера;
ШтрихКодПечатнойФормы = Прав(ШтрихКодПечатнойФормы, СтрДлина(ШтрихКодПечатнойФормы) - 3);
// Год документа
ГодДокумента = Сред(ШтрихКод, 4, 4);
// Префикс документа (число)
ПрефиксДокумента = Сред(ШтрихКод, 8, 8);
ПрефиксДокументаТекст = "";
Для Ном = 1 По 4 Цикл
КодСимвола = Лев(ПрефиксДокумента, 2);
Если КодСимвола = "00" Тогда Продолжить; КонецЕсли;
ПрефиксДокументаТекст = ПрефиксДокументаТекст + Символ(Число(КодСимвола) + 1000);
ПрефиксДокумента = Прав(ПрефиксДокумента, СтрДлина(ПрефиксДокумента) - 2);
КонецЦикла;
// Номер документа
НомерДокумента = Сред(ШтрихКод, 16, 11);
НулиНомера = "";
НомерДокумента = Прав(НомерДокумента, КоличествоСимволовНомера - СтрДлина(ПрефиксДокументаТекст));
// Номер с префиксом
НомерСПрефиксом = ПрефиксДокументаТекст + НомерДокумента;
Запрос = Новый Запрос();
Запрос.Текст = "ВЫБРАТЬ
| ТипДокумента.Номер,
| ЕСТЬNULL(ТипДокумента.Ссылка, НЕОПРЕДЕЛЕНО) КАК Ссылка
|ИЗ
| Документ.ПеремещениеТоваров КАК ТипДокумента
|ГДЕ
| ТипДокумента.Номер = &НомерДокумента
| И ГОД(ТипДокумента.Дата) = &ГодДокумента";
Запрос.Текст = СтрЗаменить(Запрос.Текст, "ПеремещениеТоваров", ТипДокумента);
Запрос.УстановитьПараметр("ГодДокумента", Число(ГодДокумента));
Запрос.УстановитьПараметр("НомерДокумента", НомерСПрефиксом);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Возврат Выборка.Ссылка;
КонецЕсли;
Возврат Неопределено;
КонецФункции
Прикрепленные файлы:
Пример печати ШК.epf
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот