Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
06 апр 2025, 20:15

Печать ШтрихКода

Автор Никитa, 23 окт 2014, 07:44

0 Пользователей и 1 гость просматривают эту тему.

Никитa

Столкнулся с проблемой печати штрих кода  :dfbbdrfb:
установил баркод
Хочу сказать что использую не типовую конфигурацию
Документы -> ПриходнаяНакладная
На этой форме нужно разместить кнопку Печать что я и сделал
Через конструктор печати.
В итоге получилось 

Команда  ->Печать

&НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) //{{_КОНСТРУКТОР_ПЕЧАТИ(Печать) ТабДок = Новый ТабличныйДокумент; Печать(ТабДок, ПараметрКоманды); ТабДок.ОтображатьСетку = Ложь; ТабДок.Защита = Ложь; ТабДок.ТолькоПросмотр = Ложь; ТабДок.ОтображатьЗаголовки = Ложь; ТабДок.Показать(); //}} КонецПроцедуры &НаСервере Процедура Печать(ТабДок, ПараметрКоманды) Документы.ПриходнаяНакладная.Печать(ТабДок, ПараметрКоманды); КонецПроцедуры

Макет      ->Печать
Выбрал облась печати и поставил картинку (Скрин ниже)

Захожу в режим предприятия, Документы -> ПриходнаяНакладная
нажимаю кнопку Печать и выскакивает ошибка (Скрин ниже)
Подскажите  пожалуйста кто знает ?

ps. Облазил Интернет ничего толкового не нашел, кроме как установить баркод и воспользоваться коммерческим продуктом  StrokeScribe.

has

А где запрос, на который ругается?

Никитa

Цитата: has от 23 окт 2014, 07:49
А где запрос, на который ругается?
А в том то и дело что нету запроса.
Я вот и хотел поинтересоваться.
1) Где  должен быть запрос?
2) Можно ли как то интерактивно написать?

has

Ну в скрине же явно показывает где ошибка, в приходной накладной в модуле менеджера есть запрос.

Никитa

Цитата: has от 23 окт 2014, 07:56
Ну в скрине же явно показывает где ошибка, в приходной накладной в модуле менеджера есть запрос.
Текст кода из модуля  приходной накладной
тут по мойму нет запроса
&НаКлиенте Процедура ТаблЧастьШтрихКодПриИзменении(Элемент) СтрокаТабличнойЧасти = Элементы.ТаблЧасть.ТекущиеДанные; СтрокаТабличнойЧасти.Номенклатура = РаботаСоСправочниками.УстанавливаемаяНоменклатура(СтрокаТабличнойЧасти.ШтрихКод); СтрокаТабличнойЧасти.ЕдИзм = РаботаСоСправочниками.УстановкаЕдИзм(СтрокаТабличнойЧасти.Номенклатура); Объект.ИтоговаяСумма = Объект.ТаблЧасть.Итог("Сумма"); СтрокаТабличнойЧасти.Артикул = РаботаСоСправочниками.УстановкаАртикула(СтрокаТабличнойЧасти.Номенклатура); КонецПроцедуры &НаКлиенте Процедура ТаблЧастьНоменклатураПриИзменении(Элемент) СтрокаТабличнойЧасти = Элементы.ТаблЧасть.ТекущиеДанные; СтрокаТабличнойЧасти.ШтрихКод = РаботаСоСправочниками.УстанавливаемыйШтрихКод(СтрокаТабличнойЧасти.Номенклатура); СтрокаТабличнойЧасти.ЕдИзм = РаботаСоСправочниками.УстановкаЕдИзм(СтрокаТабличнойЧасти.Номенклатура); СтрокаТабличнойЧасти.Цена = РаботаСоСправочниками.ПолучитьТекущуюЦену(СтрокаТабличнойЧасти.Номенклатура, Объект.ВидЦены, Объект.Дата, Объект.Валюта); СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Цена * СтрокаТабличнойЧасти.Количество; СтрокаТабличнойЧасти.Артикул = РаботаСоСправочниками.УстановкаАртикула(СтрокаТабличнойЧасти.Номенклатура); СтрокаТабличнойЧасти.ОстатокНаСкладе =  ОстатокНаСкладе(СтрокаТабличнойЧасти.Номенклатура, Объект.Склад); Объект.ИтоговаяСумма = Объект.ТаблЧасть.Итог("Сумма"); КонецПроцедуры &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) ТекущийСотрудник = Справочники.Сотрудники.НайтиПоНаименованию(СокрЛП(ИмяПользователя()));    // Заполняем валюту по умолчанию Если ПустаяСтрока( Объект.Валюта) Тогда Объект.Валюта = Константы.ФирмаПоУмолчанию.Получить().ВалютаПоУмолчанию; Объект.КурсВалюты = РаботаСоСправочниками.ТекущийКурсВалюты(Объект.Валюта, Объект.Дата); КонецЕсли; // Заполняем склад по умолчанию Если ПустаяСтрока(Объект.Склад) Тогда Объект.Менеджер = ТекущийСотрудник; Объект.Склад   = ТекущийСотрудник.СкладПоУмолчанию; КонецЕсли; Если ПустаяСтрока(Объект.Менеджер) Тогда Объект.Менеджер = ТекущийСотрудник; КонецЕсли; Если ПустаяСтрока(Объект.ВидЦены) Тогда Объект.ВидЦены = Справочники.ВидЦены.НайтиПоНаименованию("Закупочная"); КонецЕсли; Если ПустаяСтрока(Объект.Фирма) Тогда Объект.Фирма = Константы.ФирмаПоУмолчанию.Получить(); КонецЕсли; Объект.ОбновитьЦены = Ложь; КонецПроцедуры &НаКлиенте Процедура ТаблЧастьКоличествоПриИзменении(Элемент) СтрокаТабличнойЧасти = Элементы.ТаблЧасть.ТекущиеДанные;     СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Количество*СтрокаТабличнойЧасти.Цена; Объект.ИтоговаяСумма = Объект.ТаблЧасть.Итог("Сумма"); КонецПроцедуры &НаКлиенте Процедура ТаблЧастьЦенаПриИзменении(Элемент) СтрокаТабличнойЧасти = Элементы.ТаблЧасть.ТекущиеДанные;     СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Количество*СтрокаТабличнойЧасти.Цена; Объект.ИтоговаяСумма = Объект.ТаблЧасть.Итог("Сумма"); КонецПроцедуры &НаКлиенте Процедура НоваяСтрока(Команда) СтрокаТабличнойЧасти = Элементы.ТаблЧасть.ТекущиеДанные; ТекущийЭлемент = Элементы.ТекущийШтрихКод; КонецПроцедуры &НаКлиенте Процедура ТекущийШтрихКодПриИзменении(Элемент) НайтиПоШтрихКоду();     ТекущийЭлемент = Элементы.ТекущийШтрихКод;     КонецПроцедуры &НаСервере Процедура НайтипоШтрихКоду() Выборка = Объект.ТаблЧасть; Сч = 0; Для Каждого Строч из Выборка Цикл Если Строч.ШтрихКод = Объект.ТекущийШтрихКод Тогда Сч = 1; Строч.Количество = Строч.Количество+1; Прервать; КонецЕсли; КонецЦикла; Если Сч = 0 тогда Номенклатура = ""; Номенклатура = РаботаСоСправочниками.УстанавливаемаяНоменклатура(Объект.ТекущийШтрихКод); Если Номенклатура = Неопределено тогда Сообщить("Товар по штрих-коду не найден") Иначе НовСтрока = Объект.ТаблЧасть.Добавить(); НовСтрока.Номенклатура = Номенклатура; НовСтрока.ШтрихКод = Объект.ТекущийШтрихКод; НовСтрока.Количество = 1; НовСтрока.Цена = РаботаСоСправочниками.ПолучитьТекущуюЦену(Номенклатура, Объект.ВидЦены, Объект.Дата, Объект.Валюта); НовСтрока.Сумма = НовСтрока.Цена *  НовСтрока.Количество; НовСтрока.ЕдИзм = Номенклатура.ЕдиницаИзмерения; НовСтрока.ОстатокНаСкладе = ОстатокНаСкладе(Номенклатура, Объект.Склад); НовСтрока.Артикул       = Номенклатура.Артикул; //арт КонецЕсли; КонецЕсли; Объект.ИтоговаяСумма = Объект.ТаблЧасть.Итог("Сумма"); Объект.ТекущийШтрихКод = ""; КонецПроцедуры   &НаСервере Функция ПодключитьВнешнююКомпонентуПечатиШтрихкода(Владелец) // В зависимости от типа платформы подключим соответствующую внешнюю компоненту ПодключениеВыполнено = Неопределено; СистемнаяИнформация = Новый СистемнаяИнформация; Если СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86 Тогда ПодключениеВыполнено = ПодключитьВнешнююКомпоненту("Обработка.ПечатьЭтикетокИЦенников.Макет.КомпонентаПечатиШтрихкодовWindows32", "КартинкаШтрихкода", ТипВнешнейКомпоненты.Native); ИначеЕсли СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда ПодключениеВыполнено = ПодключитьВнешнююКомпоненту("Обработка.ПечатьЭтикетокИЦенников.Макет.КомпонентаПечатиШтрихкодовWindows64", "КартинкаШтрихкода", ТипВнешнейКомпоненты.Native); ИначеЕсли СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86 Тогда ПодключениеВыполнено = ПодключитьВнешнююКомпоненту("Обработка.ПечатьЭтикетокИЦенников.Макет.КомпонентаПечатиШтрихкодовLinux32", "КартинкаШтрихкода", ТипВнешнейКомпоненты.Native); Иначе ПодключениеВыполнено = ПодключитьВнешнююКомпоненту("Обработка.ПечатьЭтикетокИЦенников.Макет.КомпонентаПечатиШтрихкодовLinux64", "КартинкаШтрихкода", ТипВнешнейКомпоненты.Native); КонецЕсли; // Создадим объект внешней компоненты Если ПодключениеВыполнено Тогда ВнешняяКомпонента = Новый("AddIn.КартинкаШтрихкода.Barcode"); Иначе Возврат Неопределено; КонецЕсли; // Если нет возможности рисовать Если НЕ ВнешняяКомпонента.ГрафикаУстановлена Тогда // То картинку сформировать не сможем Возврат Неопределено; Иначе // Установим основные параметры компоненты // Если в системе установлен шрифт Tahoma Если ВнешняяКомпонента.НайтиШрифт("Tahoma") = Истина Тогда // Выбираем его как шрифт для формирования картинки ВнешняяКомпонента.Шрифт = "Tahoma"; Иначе // Шрифт Tahoma в системе отсутствует // Обойдем все доступные компоненте шрифты Для Сч = 0 По ВнешняяКомпонента.КоличествоШрифтов -1 Цикл // Получим очередной шрифт, доступный компоненте ТекущийШрифт = ВнешняяКомпонента.ШрифтПоИндексу(Сч); // Если шрифт доступен Если ТекущийШрифт <> Неопределено Тогда // Они и будет шрифтом для формирования штри-кода ВнешняяКомпонента.Шрифт = ТекущийШрифт; Прервать; КонецЕсли; КонецЦикла; КонецЕсли; // Утановим размер шрифта ВнешняяКомпонента.РазмерШрифта = 12; Возврат ВнешняяКомпонента; КонецЕсли; КонецФункции Функция ОстатокНаСкладе (Номенклатура, Склад) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ОстаткиТоваровОстатки.Склад, | ОстаткиТоваровОстатки.Номенклатура, | ОстаткиТоваровОстатки.КоличествоОстаток |ИЗ | РегистрНакопления.ОстаткиТоваров.Остатки(&Дата) КАК ОстаткиТоваровОстатки |ГДЕ | ОстаткиТоваровОстатки.Склад = &Склад | И ОстаткиТоваровОстатки.Номенклатура = &Номенклатура"; Запрос.УстановитьПараметр("Номенклатура", Номенклатура); Запрос.УстановитьПараметр("Склад", Склад); Если Объект.Дата = НачалоДня(ТекущаяДата()) И ПустаяСтрока(Объект.Номер) Тогда Запрос.УстановитьПараметр("Дата", ТекущаяДата()); Иначе Запрос.УстановитьПараметр("Дата", Объект.Дата); КонецЕсли; Результат = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = Результат.Выбрать();          ОстатокНоменклатуры = 0; Пока ВыборкаДетальныеЗаписи.Следующий() Цикл ОстатокНоменклатуры = ВыборкаДетальныеЗаписи.КоличествоОстаток; КонецЦикла; Возврат   ОстатокНоменклатуры; КонецФункции //&НаКлиенте // Процедура СкладПриИзменении(Элемент) // МеняемСклад(); // КонецПроцедуры // // &НаСервере // // Процедура МеняемСклад() // Для Каждого ТекСтрокаТаблЧасть Из Объект.ТаблЧасть Цикл // Номенклатура = ТекСтрокаТаблЧасть.Номенклатура; // ТекСтрокаТаблЧасть.ОстатокНаСкладе =  ОстатокНаСкладе (Номенклатура, Объект.Склад); // // КонецЦикла; // // КонецПроцедуры &НаКлиенте Процедура ТаблЧастьПослеУдаления(Элемент) Объект.ИтоговаяСумма = Объект.ТаблЧасть.Итог("Сумма"); КонецПроцедуры // отрабатываем подбор &НаКлиенте Процедура Подбор(Команда) ПараметрыФормы = Новый Структура ("ЗакрыватьПриВыборе", Ложь); ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора", ПараметрыФормы, Элементы.ТаблЧасть); КонецПроцедуры            // отрабатываем подбор &НаКлиенте Процедура ТаблЧастьОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) Сч =  проверкаНаличия(ВыбранноеЗначение); Если Сч = 0 Тогда Элементы.ТаблЧасть.ДобавитьСтроку(); Элементы.ТаблЧасть.ТекущиеДанные.Номенклатура = ВыбранноеЗначение; ЗаполнитьДанные(Элементы.ТаблЧасть.ТекущиеДанные.Номенклатура, Элементы.ТаблЧасть.ТекущиеДанные.НомерСтроки); КонецЕсли КонецПроцедуры          // отрабатываем подбор &НаСервере Функция проверкаНаличия(ВыбранноеЗначение) Сч = 0; Для каждого Строч Из Объект.ТаблЧасть Цикл Если Строч.Номенклатура = ВыбранноеЗначение тогда Строч.Количество = Строч.Количество + 1;// Если товар уже есть - то просто приплюсуем его; Строч.Сумма = Строч.Цена*Строч.Количество;              Объект.ИтоговаяСумма = Объект.ТаблЧасть.Итог("Сумма"); Сч = 1; КонецЕсли; КонецЦикла; Возврат Сч; КонецФункции          // отрабатываем подбор &НаСервере Процедура  ЗаполнитьДанные(товар, строка) Для каждого строч из Объект.ТаблЧасть Цикл Если Строч.НомерСтроки = Строка Тогда Строч.ШтрихКод = Товар.ШтрихКод; Строч.ЕдИзм = Товар.ЕдиницаИзмерения; Строч.Количество = 1; Строч.Цена = РаботаСоСправочниками.ПолучитьТекущуюЦену(Строч.Номенклатура, Объект.ВидЦены, Объект.Дата, Объект.Валюта); //Цена Строч.Сумма = Строч.Цена*Строч.Количество; Строч.ОстатокНаСкладе = ОстатокНаСкладе(Строч.Номенклатура, Объект.Склад); Объект.ИтоговаяСумма = Объект.ТаблЧасть.Итог("Сумма"); КонецЕсли; КонецЦикла; КонецПроцедуры      //арт &НаКлиенте Процедура НайтиПоАртикулу(Команда) СтрокаТабличнойЧасти = Элементы.ТаблЧасть.ТекущиеДанные; ТекущийЭлемент = Элементы.ТекущийАртикул; КонецПроцедуры       //арт &НаКлиенте Процедура ТекущийАртикулПриИзменении(Элемент) НайтиПоТекущемуАртикулу(); ТекущийЭлемент = Элементы.ТекущийАртикул; КонецПроцедуры //арт    &НаСервере        Процедура НайтиПоТекущемуАртикулу() Выборка = Объект.ТаблЧасть; Сч = 0; Для Каждого Строч из Выборка Цикл Если Строч.Артикул = Объект.ТекущийАртикул Тогда Сч = 1; Строч.Количество = Строч.Количество+1; Прервать; КонецЕсли; КонецЦикла; Если Сч = 0 тогда Номенклатура = ""; Номенклатура = РаботаСоСправочниками.НайтиПоАртикулу(Объект.ТекущийАртикул); Если Номенклатура = Неопределено тогда Сообщить("Товар по Артикулу не найден") Иначе НовСтрока = Объект.ТаблЧасть.Добавить(); НовСтрока.Номенклатура = Номенклатура; НовСтрока.ШтрихКод = Номенклатура.ШтрихКод; НовСтрока.Количество = 1; НовСтрока.ЕдИзм = Номенклатура.ЕдиницаИзмерения; НовСтрока.ОстатокНаСкладе = ОстатокНаСкладе(Номенклатура, Объект.Склад); НовСтрока.Артикул = РаботаСоСправочниками.НайтиАртикул(Номенклатура); НовСтрока.Цена = РаботаСоСправочниками.ПолучитьТекущуюЦену(Номенклатура, Объект.ВидЦены, Объект.Дата, Объект.Валюта); НовСтрока.Сумма = НовСтрока.Цена *  НовСтрока.Количество; КонецЕсли; КонецЕсли; Объект.ТекущийАртикул = "";     КонецПроцедуры     &НаКлиенте Процедура ВидЦеныПриИзменении(Элемент) Если РольПользователя("Администратор") = Ложь Тогда Если Строка(Объект.ВидЦены) = "Закупочная" тогда ВидЦены(); Сообщить ("У Вас нет прав выбирать закупочную Цену"); КонецЕсли; КонецЕсли; КонецПроцедуры &НаСервере Функция РольПользователя(Роль) Возврат РольДоступна(Роль); КонецФункции &НаСервере Процедура ВидЦены() ТекущийСотрудник = Справочники.Сотрудники.НайтиПоНаименованию(СокрЛП(ИмяПользователя())); Объект.ВидЦены = ТекущийСотрудник.ВидПродажнойЦены; КонецПроцедуры // пересчитываем в курсах валют &НаКлиенте Процедура ВалютаПриИзменении(Элемент) КурсВалюты() КонецПроцедуры // пересчитываем в курсах валют &НаСервере Процедура КурсВалюты()   Валюта=10;   //Объект.КурсВалюты = РаботаСоСправочниками.ТекущийКурсВалюты(Объект.Валюта, Объект.Дата); //Для КАЖДОГО Строч ИЗ Объект.ТаблЧасть Цикл // Если Объект.КурсВалюты = 0 Тогда // Сообщить("Для данной валюты, на дату документа не установлен курс!"); // Возврат // КонецЕсли; // // Строч.Цена = Окр(Строч.Цена/Объект.КурсВалюты,6); // Строч.Сумма = Строч.Цена * Строч.Количество; //КонецЦикла; КонецПроцедуры // пересчитываем в курсах валют &НаКлиенте Процедура ВалютаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) // //курсВалюты = РаботаСоСправочниками.ТекущийКурсВалюты(Объект.Валюта, Объект.Дата); //Если КурсВалюты = 0 Тогда // Сообщить("Для данной валюты, на дату документа не установлен курс!"); // Возврат //КонецЕсли; //Для КАЖДОГО Строч ИЗ Объект.ТаблЧасть Цикл // Строч.Цена  = Строч.Цена*курсВалюты; //КонецЦикла; КонецПроцедуры    //+ найти в таблице       &НаКлиенте    Процедура ШтрихТабПриИзменении(Элемент)    НайтиВТаб("Штрих");    КонецПроцедуры        &НаКлиенте    Процедура АртикулТабПриИзменении(Элемент)    НайтиВТаб("Арт");    КонецПроцедуры    &НаСервере    Процедура  НайтиВТаб(Инд)    Сч = 0;    НомерСтроки = 1;    Если Инд = "Арт" Тогда    АртикулТаб = Объект.АртикулТаб;    //=================    Пока Сч < Объект.ТаблЧасть.Количество() Цикл    Если Объект.ТаблЧасть[Сч].Артикул = АртикулТаб тогда    НомерСтроки = Объект.ТаблЧасть[Сч].ИсходныйНомерСтроки;    Если  НомерСтроки = 0 Тогда НомерСтроки = Объект.ТаблЧасть[Сч].НомерСтроки; КонецЕсли;    Прервать    КонецЕсли;    Сч = Сч+1;    КонецЦикла;    Объект.АртикулТаб = "";    //=================    ИначеЕсли Инд = "Штрих" Тогда    ШтрихТаб =  Объект.ШтрихТаб;    //=================    Пока Сч < Объект.ТаблЧасть.Количество() Цикл    Если Объект.ТаблЧасть[Сч].ШтрихКод = ШтрихТаб тогда    НомерСтроки = Объект.ТаблЧасть[Сч].ИсходныйНомерСтроки;    Если  НомерСтроки = 0 Тогда НомерСтроки = Объект.ТаблЧасть[Сч].НомерСтроки; КонецЕсли;    Прервать    КонецЕсли;    Сч = Сч+1;    КонецЦикла;    Объект.ШтрихТаб = "";    КонецЕсли;    //===================    Элементы.ТаблЧасть.ТекущаяСтрока = НомерСтроки-1;    КонецПроцедуры &НаКлиенте    Процедура СкладПриИзменении(Элемент)     Элементы.ТаблЧастьЯчейка.Видимость = тк_Сервер.ПолучитьРеквизитПоСсылке(Объект.Склад, "ИспользоватьАдресноеХранение");    КонецПроцедуры

has

Еще раз, документ приходная накладная, модуль менеджера, найдите эту строку Запрос.Выполнить().Выбрать();
Там и смотреть текст запроса

TreeDogNight

Чтобы быстро найти место с ошибкой зайдите в конфигураторе во вкладку Отлатка > Остановка по ошибке, и поставьте галочку на "Останавливаться по ошибки", и будет вам счастье:)

Besart

Цитата: Никитa от 23 окт 2014, 07:44ps. Облазил Интернет ничего толкового не нашел, кроме как установить баркод и воспользоваться коммерческим продуктом  StrokeScribe.
делал обработку для печати этикеток и ценников для УТ 10.3, чем то мне не понравился типовой механизм, в итоге слямзил из УТ 11, все работает


Никитa

Цитата: Besart от 23 окт 2014, 16:26
Цитата: Никитa от 23 окт 2014, 07:44ps. Облазил Интернет ничего толкового не нашел, кроме как установить баркод и воспользоваться коммерческим продуктом  StrokeScribe.
делал обработку для печати этикеток и ценников для УТ 10.3, чем то мне не понравился типовой механизм, в итоге слямзил из УТ 11, все работает
А осталась обработка?)

Besart

Цитата: Никитa от 24 окт 2014, 11:47А осталась обработка?)
осталась, но я ее делал под заказ, поэтому правов не имею выкладывать,
посмотрите как работает обработка ПечатьЭтикетокИЦенников в УТ 11, в частности она использует КомпонентаПечатиШтрихкодов - находится в общих макетах

Похожие темы (5)

Рейтинг@Mail.ru

Поиск