Печать документов с добавлением штрих-кодов

1. Corvus27 19.03.13 07:54 Сейчас в теме
Братья и сестры! Такая дилемма: в общем надо организовать распечатку документов 1С 8.2 с штрих-кодами.
Если конкретнее, то получается так:
Имеется компания. Она обслуживает множество других компаний. И естественно вокруг этого крутится масса документов. Нашему бухгалтеру-менеджеру уж очень не удобно вручную искать эти документы у себя в базе. А вот если бы каждый документ был бы промаркерован штрих-кодом, то это существенно бы облегчило дело! Поэтому необходимо осуществить для начала печать документов с присвоением, где-нибудь в верхней части, штрих-кода(как заполнять штрих-код вопросов нет, к каждому разряду (к примеру EAN13) присвоит номер дока, дату и тд.).

Приветствуется любая помощь, буду благодарен полезным ссылкам на очень содержательную инфу. А то и так сам уже не первый день лажу, а толку как об стенку.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. beldieff 19.03.13 08:34 Сейчас в теме
(1) Corvus27,
Поэтому необходимо осуществить для начала печать документов с присвоением, где-нибудь в верхней части, штрих-кода(как заполнять штрих-код вопросов нет, к каждому разряду (к примеру EAN13) присвоит номер дока, дату и тд.).

Если как формировать штрихкод вопросов нет тогда в чем?
5. Corvus27 19.03.13 09:04 Сейчас в теме
(2) beldieff, Формировка именно штрихкода в документе. просто не могу разобраться что к чему. Есть сайт strokescribe.com. Там описан пример добавления в макет. Но я от этого не могу отталкиваться.
7. beldieff 19.03.13 10:34 Сейчас в теме
(5) Corvus27,
Формировка именно штрихкода в документе. просто не могу разобраться что к чему

Внешняя печатная форма, а там уже формировать.
3. ch-15 19.03.13 08:50 Сейчас в теме
Длинновато и кривовато, но работает.

// Создать штрих-код
Функция ПолучитьШтрихКодДокументаПоСсылке(СсылкаДокумент) Экспорт
// Тип документа
НомерДокументаМетаданные = Метаданные.Документы.Индекс(Метаданные.Документы[СсылкаДокумент.Метаданные().Имя]);
НомерДокументаМетаданные = Прав("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
4. Corvus27 19.03.13 09:02 Сейчас в теме
благодарю за познавательный пример. Сейчас же приступлю к его разбору. И самое главное, я так понимаю данный пример рассчитан только на один документ?
6. ch-15 19.03.13 09:12 Сейчас в теме
(4) Corvus27, в функцию передается ссылка на один документ, тип документа можно передавать любой. В файле пример использования.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот