Всім добрий день, пишу розширення для БАС МБ щоб при записі штрихкода який є вже в іншій номенклатурі - було підтвердження, щоб було менше помилок. Написав мінімальне розширення, але справа в тому що вікно підтвердження зацикліється і запис не відбувається. У чому може бути справа і як це мені виправити. Я поки початковий програміст 1с.
Моє розширення у модулі форми регіства відемостей ШтрихкодыНоменклатуры: Код
&НаСервере Функция ЕстьДубликатШтрихкода(Штрихкод, Номенклатура)
Запрос = Новый Запрос( "ВЫБРАТЬ ПЕРВЫЕ 1 | Номенклатура |ИЗ РегистрСведений.ШтрихкодыНоменклатуры |ГДЕ Штрихкод = &Штрихкод | И Номенклатура <> &Номенклатура" ); Запрос.УстановитьПараметр("Штрихкод", Штрихкод); Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
Результат = Запрос.Выполнить().Выбрать(); Если Результат.Следующий() Тогда Возврат "Штрихкод вже використовується для номенклатури """ + Результат.Номенклатура + """"; КонецЕсли;
Возврат "";
КонецФункции
&НаКлиенте Процедура ПродолжитьЗаписьДубля(Ответ, ДопПараметры) Экспорт Если Ответ = КодВозвратаДиалога.ОК Тогда Отказ = Ложь; ЭтаФорма.Записать(); Сообщить(" Запис виконано після підтвердження користувача"); Иначе Сообщить(" Запис скасовано користувачем"); КонецЕсли; КонецПроцедуры
Если НЕ ПустаяСтрока(ОписаниеОшибки) Тогда Отказ = Истина; ПоказатьВопрос( Новый ОписаниеОповещения("ПродолжитьЗаписьДубля", ЭтаФорма), ОписаниеОшибки + Символы.ПС + "Продовжити запис незважаючи на збіг?", РежимДиалогаВопрос.ОКОтмена ); КонецЕсли; КонецПроцедуры
// ПодключаемоеОборудование Если Источник = "ПодключаемоеОборудование" И ВводДоступен() Тогда Если ИмяСобытия = "ScanData" Тогда Данные = МенеджерОборудованияУНФКлиент.ПреобразоватьДанныеСоСканераВМассив(Параметр); ПолученыШтрихкоды(Данные); ИначеЕсли ИмяСобытия = "DataCollectionTerminal" Тогда ПолученыШтрихкоды(Параметр); КонецЕсли; КонецЕсли; // Конец ПодключаемоеОборудование
// Процедура обработчик команды НовыйШтрихкод. // &НаКлиенте Процедура НовыйШтрихкод(Команда)
Если Не ЗначениеЗаполнено(Запись.Номенклатура) Тогда СтрокаСообщения = НСтр("ru='Штрихкод не сгенерирован. Предварительно выберите номенклатуру.';uk='Штрихкод не згенерований. Попередньо виберіть номенклатуру.'"); ОбщегоНазначенияКлиент.СообщитьПользователю(СтрокаСообщения); Возврат КонецЕсли;
Если ИспользоватьОбменСПодключаемымОборудованиемOffline И ВесоваяНоменклатура() Тогда СформироватьШтрихкодВесовогоТовара(); Иначе Запись.Штрихкод = СформироватьШтрихкодEAN13(); КонецЕсли;
КонецПроцедуры
&НаКлиенте Процедура УдалитьЗапись(Команда)
ОписаниеОповещения = Новый ОписаниеОповещения("УдалитьЗаписьНаКлиенте", ЭтотОбъект); ПоказатьВопрос(ОписаниеОповещения, НСтр("ru = 'Удалить ""Штрихкоды номенклатуры"" ?'; uk = 'Вилучити ""Штрихкоди номенклатури"" ?'"), РежимДиалогаВопрос.ДаНет);
а где оно у вас вызывается, это вот fix_ПередЗаписью()? вы же штатную процедуру ПередЗаписью() не заменяете в расширении -- вот она и вызывается циклически
надо использовать директивы &Перед("ПередЗаписью") или &Вместо("ПередЗаписью")
[необходимо зарегистрироваться для просмотра ссылки]
ПоказатьВопрос( Новый ОписаниеОповещения("ПродолжитьЗаписьДубля", ЭтаФорма), ОписаниеОшибки + Символы.ПС + "Продовжити запис незважаючи на збіг?", РежимДиалогаВопрос.ОКОтмена );
Отказ = Истина;
КонецЕсли;
КонецПроцедуры
Зробив так і вже не зацикліється. Але дає помилку Заборонено зміну параметра, що скасовує дію (параметр номер 1 в процедурі ) це із за Отказ = Истина;, як я його можу замінити також робив Отказ = Истина; Отказ = Неопределено; то одразу вікно через секунду пропадає і записує, може можна між ними якийсь таймер або сон добавити? Або є якесь інше рішення?
а посмотрите еще в модуле объекта -- там точно есть (у меня в старой УНФ -- есть)
У мене модуль набору записів - пустий, а вот в модулі менеджера є код, але згадкі про запис ніякої немає, надсилаю код: (Можливо є якийсь інший підхід щоб не було Отказ = истина)
Запрос = Новый Запрос( "ВЫБРАТЬ | Рег.Штрихкод КАК Штрихкод, | Рег.Номенклатура КАК Номенклатура, | Рег.Характеристика КАК Характеристика, | Рег.Партия КАК Партия, | Рег.ЕдиницаИзмерения КАК ЕдиницаИзмерения, | ЕСТЬNULL(СерииНоменклатуры.Ссылка, ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)) КАК Серия |ИЗ | РегистрСведений.ШтрихкодыНоменклатуры КАК Рег | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СерииНоменклатуры КАК СерииНоменклатуры | ПО (&СерииНоменклатурыИспользуются) | И Рег.Номенклатура = СерииНоменклатуры.Владелец | И (Рег.Номенклатура.ИспользоватьСерииНоменклатуры) | И Рег.Штрихкод = СерииНоменклатуры.Наименование |ГДЕ | Рег.Штрихкод В(&МассивШтрихкодов) |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ТЗДанныеОВесовомТоваре.КодВесовогоТовара КАК КодВесовогоТовара, | ТЗДанныеОВесовомТоваре.ПрефиксВесовогоТовара КАК ПрефиксВесовогоТовара, | ТЗДанныеОВесовомТоваре.ШтрихКод КАК ШтрихКод |ПОМЕСТИТЬ ВременнаяТаблицаВесовойТовар |ИЗ | &ТЗДанныеОВесовомТоваре КАК ТЗДанныеОВесовомТоваре |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | КодыТоваровSKU.Номенклатура КАК Номенклатура, | КодыТоваровSKU.Характеристика КАК Характеристика, | КодыТоваровSKU.Партия КАК Партия, | КодыТоваровSKU.ЕдиницаИзмерения КАК ЕдиницаИзмерения, | ВременнаяТаблицаВесовойТовар.ШтрихКод КАК ШтрихКод, | ВременнаяТаблицаВесовойТовар.КодВесовогоТовара КАК КодВесовогоТовара, | ВременнаяТаблицаВесовойТовар.ПрефиксВесовогоТовара КАК ПрефиксВесовогоТовара, | ЕСТЬNULL(СерииНоменклатуры.Ссылка, ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)) КАК Серия, | ЕСТЬNULL(КодыТоваровSKU.Номенклатура.ВидАлкогольнойПродукции.Маркируемый, ЛОЖЬ) | ИЛИ КодыТоваровSKU.Номенклатура.ТабачнаяПродукция КАК МаркируемаяПродукция |ИЗ | РегистрСведений.КодыТоваровSKU КАК КодыТоваровSKU | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВременнаяТаблицаВесовойТовар КАК ВременнаяТаблицаВесовойТовар | ПО КодыТоваровSKU.SKU = ВременнаяТаблицаВесовойТовар.КодВесовогоТовара | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СерииНоменклатуры КАК СерииНоменклатуры | ПО (&СерииНоменклатурыИспользуются) | И КодыТоваровSKU.Номенклатура = СерииНоменклатуры.Владелец | И (КодыТоваровSKU.Номенклатура.ИспользоватьСерииНоменклатуры) | И (ВременнаяТаблицаВесовойТовар.ШтрихКод = СерииНоменклатуры.Наименование) |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВременнаяТаблицаВесовойТовар.КодВесовогоТовара КАК КодВесовогоТовара, | ВременнаяТаблицаВесовойТовар.ПрефиксВесовогоТовара КАК ПрефиксВесовогоТовара, | ВременнаяТаблицаВесовойТовар.ШтрихКод КАК ШтрихКод |ИЗ | ВременнаяТаблицаВесовойТовар КАК ВременнаяТаблицаВесовойТовар");
МассивШтрихкодов = Новый Массив; ТЗДанныеОВесовомТоваре = Новый ТаблицаЗначений; ТЗДанныеОВесовомТоваре.Колонки.Добавить("КодВесовогоТовара", Новый ОписаниеТипов("Число",,, Новый КвалификаторыЧисла(15, 0, ДопустимыйЗнак.Неотрицательный))); ТЗДанныеОВесовомТоваре.Колонки.Добавить("ПрефиксВесовогоТовара", Новый ОписаниеТипов("Число",,, Новый КвалификаторыЧисла(1, 0, ДопустимыйЗнак.Неотрицательный))); ТЗДанныеОВесовомТоваре.Колонки.Добавить("Штрихкод", Новый ОписаниеТипов("Строка",,,, Новый КвалификаторыСтроки(200)));
Для каждого ТекШтрихкод Из Штрихкоды Цикл МассивШтрихкодов.Добавить(ТекШтрихкод.ШтрихКод); ДанныеПоШтрихкодам.Вставить(ТекШтрихкод.ШтрихКод, Новый Структура);
Если ТекШтрихкод.Свойство("КодВесовогоТовара") Тогда НоваяСтрокаОВесовомТоваре = ТЗДанныеОВесовомТоваре.Добавить(); НоваяСтрокаОВесовомТоваре.КодВесовогоТовара = ТекШтрихкод.КодВесовогоТовара; НоваяСтрокаОВесовомТоваре.ПрефиксВесовогоТовара = ТекШтрихкод.ПрефиксВесовогоТовара; НоваяСтрокаОВесовомТоваре.Штрихкод = ТекШтрихкод.Штрихкод; КонецЕсли; КонецЦикла;
Запрос.УстановитьПараметр("МассивШтрихкодов", МассивШтрихкодов); ИспользоватьСерииНоменклатуры = СерииНоменклатурыУНФ.ИспользоватьСерииНоменклатурыОстатки(); Если ИспользоватьСерииНоменклатуры<>Неопределено Тогда Запрос.УстановитьПараметр("СерииНоменклатурыИспользуются", Истина); Иначе Запрос.УстановитьПараметр("СерииНоменклатурыИспользуются", Ложь); КонецЕсли; Запрос.УстановитьПараметр("ТЗДанныеОВесовомТоваре", ТЗДанныеОВесовомТоваре); Запрос.УстановитьПараметр("СтруктурнаяЕдиница", СтруктурнаяЕдиница);
Если ИспользоватьСерииНоменклатуры<>Неопределено Тогда ТекДанные.Вставить("Серия", Выборка.Серия); КонецЕсли; КонецЦикла;
Выборка = МассивРезультатов[0].Выбрать(); Пока Выборка.СледующийПоЗначениюПоля("Штрихкод") Цикл ТекДанные = ДанныеПоШтрихкодам[Выборка.Штрихкод]; Если НЕ ТекДанные.Свойство("КодВесовогоТовара") Тогда ТекДанные.Вставить("Номенклатура", Выборка.Номенклатура); ТекДанные.Вставить("Характеристика", Выборка.Характеристика); ТекДанные.Вставить("Партия", Выборка.Партия); ТекДанные.Вставить("ЕдиницаИзмерения", Выборка.ЕдиницаИзмерения);
Если ИспользоватьСерииНоменклатуры<>Неопределено Тогда ТекДанные.Вставить("Серия", Выборка.Серия); КонецЕсли; КонецЕсли; КонецЦикла;
Запрос = Новый Запрос( "ВЫБРАТЬ | Рег.Штрихкод КАК Штрихкод, | Рег.Номенклатура КАК Номенклатура, | Рег.Характеристика КАК Характеристика, | Рег.Партия КАК Партия, | Рег.ЕдиницаИзмерения КАК ЕдиницаИзмерения, | ЕСТЬNULL(СерииНоменклатуры.Ссылка, ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)) КАК Серия |ИЗ | РегистрСведений.ШтрихкодыНоменклатуры КАК Рег | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СерииНоменклатуры КАК СерииНоменклатуры | ПО (&СерииНоменклатурыИспользуются) | И Рег.Номенклатура = СерииНоменклатуры.Владелец | И (Рег.Номенклатура.ИспользоватьСерииНоменклатуры) | И Рег.Штрихкод = СерииНоменклатуры.Наименование |ГДЕ | Рег.Штрихкод В(&МассивШтрихкодов) |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ТЗДанныеОВесовомТоваре.КодВесовогоТовара КАК КодВесовогоТовара, | ТЗДанныеОВесовомТоваре.ПрефиксВесовогоТовара КАК ПрефиксВесовогоТовара, | ТЗДанныеОВесовомТоваре.ШтрихКод КАК ШтрихКод |ПОМЕСТИТЬ ВременнаяТаблицаВесовойТовар |ИЗ | &ТЗДанныеОВесовомТоваре КАК ТЗДанныеОВесовомТоваре |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | КодыТоваровSKU.Номенклатура КАК Номенклатура, | КодыТоваровSKU.Характеристика КАК Характеристика, | КодыТоваровSKU.Партия КАК Партия, | КодыТоваровSKU.ЕдиницаИзмерения КАК ЕдиницаИзмерения, | ВременнаяТаблицаВесовойТовар.ШтрихКод КАК ШтрихКод, | ВременнаяТаблицаВесовойТовар.КодВесовогоТовара КАК КодВесовогоТовара, | ВременнаяТаблицаВесовойТовар.ПрефиксВесовогоТовара КАК ПрефиксВесовогоТовара, | ЕСТЬNULL(СерииНоменклатуры.Ссылка, ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)) КАК Серия, | ЛОЖЬ КАК МаркируемаяПродукция |ИЗ | РегистрСведений.КодыТоваровSKU КАК КодыТоваровSKU | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВременнаяТаблицаВесовойТовар КАК ВременнаяТаблицаВесовойТовар | ПО КодыТоваровSKU.SKU = ВременнаяТаблицаВесовойТовар.КодВесовогоТовара | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СерииНоменклатуры КАК СерииНоменклатуры | ПО (&СерииНоменклатурыИспользуются) | И КодыТоваровSKU.Номенклатура = СерииНоменклатуры.Владелец | И (КодыТоваровSKU.Номенклатура.ИспользоватьСерииНоменклатуры) | И (ВременнаяТаблицаВесовойТовар.ШтрихКод = СерииНоменклатуры.Наименование) |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВременнаяТаблицаВесовойТовар.КодВесовогоТовара КАК КодВесовогоТовара, | ВременнаяТаблицаВесовойТовар.ПрефиксВесовогоТовара КАК ПрефиксВесовогоТовара, | ВременнаяТаблицаВесовойТовар.ШтрихКод КАК ШтрихКод |ИЗ | ВременнаяТаблицаВесовойТовар КАК ВременнаяТаблицаВесовойТовар");
МассивШтрихкодов = Новый Массив; ТЗДанныеОВесовомТоваре = Новый ТаблицаЗначений; ТЗДанныеОВесовомТоваре.Колонки.Добавить("КодВесовогоТовара", Новый ОписаниеТипов("Число",,, Новый КвалификаторыЧисла(15, 0, ДопустимыйЗнак.Неотрицательный))); ТЗДанныеОВесовомТоваре.Колонки.Добавить("ПрефиксВесовогоТовара", Новый ОписаниеТипов("Число",,, Новый КвалификаторыЧисла(1, 0, ДопустимыйЗнак.Неотрицательный))); ТЗДанныеОВесовомТоваре.Колонки.Добавить("Штрихкод", Новый ОписаниеТипов("Строка",,,, Новый КвалификаторыСтроки(200)));
Если Не ТипЗнч(МассивДанныхПоШтрихкоду) = Тип("Массив") Тогда Продолжить КонецЕсли;
ТекДанные = Новый Структура; МассивДанныхПоШтрихкоду.Добавить(ТекДанные);
Если НЕ ТекДанные.Свойство("КодВесовогоТовара") Тогда ТекДанные.Вставить("Номенклатура", Выборка.Номенклатура); ТекДанные.Вставить("Характеристика", Выборка.Характеристика); ТекДанные.Вставить("Партия", Выборка.Партия); ТекДанные.Вставить("ЕдиницаИзмерения", Выборка.ЕдиницаИзмерения);
Если ИспользоватьСерииНоменклатуры<>Неопределено Тогда ТекДанные.Вставить("Серия", Выборка.Серия); КонецЕсли; КонецЕсли; КонецЦикла;
Возврат ДанныеПоШтрихкодам;
КонецФункции
// Возвращает номенклатуру по штрихкоду // // Параметры: // ДанныеШтрихкода - Соответствие // // Возвращаемое значение: // Номенклатура - Ссылка на соответствующий справочник. Функция ПолучитьНоменклатуруПоШтрихкоду(ДанныеШтрихкода) Экспорт
// Функция осуществляет формирование штрихкода EAN8 для // штучного товара // // Возвращаемое значение: // Строка // Функция СформироватьШтрихкодEAN8() Экспорт
Код = Мин(ПоследнийКодШтучногоТовара(,, 8) + 1, МаксимальныйКодШтучногоТовара(8));
Возврат ПолучитьШтрихкодПоКоду(Код,,, 8);
КонецФункции
// Функция осуществляет формирование штрихкода EAN13 для // штучного товара // // Возвращаемое значение: // Строка // Функция СформироватьШтрихкодEAN13() Экспорт
// Функция осуществляет формирование штрихкода EAN13 для // Сотрудников // // Возвращаемое значение: // Строка // Функция СформироватьШтрихкодEAN13Сотрудник() Экспорт
// Функция возвращает массив префиксов весовых штрихкодов Функция ПрефиксыВесовыхШтрихкодов() Экспорт
УстановитьПривилегированныйРежим(Истина);
Результат = Новый Массив;
Запрос = Новый Запрос( "ВЫБРАТЬ РАЗЛИЧНЫЕ | ПравилаОбменаСПодключаемымОборудованиемOffline.ПрефиксВесовогоТовара КАК Префикс |ИЗ | Справочник.ПравилаОбменаСПодключаемымОборудованиемOffline КАК ПравилаОбменаСПодключаемымОборудованиемOffline |ГДЕ | ПравилаОбменаСПодключаемымОборудованиемOffline.ТипПодключаемогоОборудования = &ТипПодключаемогоОборудования");
Запрос.УстановитьПараметр("ТипПодключаемогоОборудования", Перечисления.ТипыПодключаемогоОборудования.ВесыСПечатьюЭтикеток); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Результат.Добавить(Строка(Выборка.Префикс)); КонецЦикла;
Возврат Результат;
КонецФункции
// Возвращает префикс штрихкода для текущего узла информационной базы // // Возвращаемое значение: // Строка - Префикс узла штрихкода // Функция ПрефиксУзлаШтрихкода() Экспорт
// Функция возвращает максимальный код штучного товара. // // Возвращаемое значение: // Число - Максимальный код штучного товара. // Функция МаксимальныйКодШтучногоТовара(EAN) Экспорт
Если EAN = 13 Тогда Возврат 99999999; КонецЕсли;
Если EAN = 8 Тогда Возврат 999999; КонецЕсли;
ВызватьИсключение НСтр("ru='Недопустимая длина EAN. Ожидается 8 или 13.';uk='Неприпустима довжина EAN. Очікується 8 або 13.'");
КонецФункции
// Функция возвращает максимальный код весового товара. // // Возвращаемое значение: // Число - Максимальный код весового товара. // Функция МаксимальныйКодВесовогоТовара() Экспорт
Возврат 99999;
КонецФункции
// Возвращает текст сообщения о недостатке свободных кодов весовых штрихкодов // // Возвращаемое значение: // Строка - Текст сообщения // Функция ТекстСообщенияНетСвободныхКодовВесовыхШтрихкодов() Экспорт Возврат НСтр("ru='Нет свободных кодов весовых штрихкодов." "Штрихкод не сформирован.';uk='Немає вільних кодів вагових штрихкодів." "Штрихкод не сформований.'") КонецФункции
// Возвращает текст сообщения о недостатке свободных кодов штучных штрихкодов // // Возвращаемое значение: // Строка - Текст сообщения // Функция ТекстСообщенияНетСвободныхКодовШтучныхШтрихкодов() Экспорт Возврат НСтр("ru='Нет свободных кодов в доступных диапазонах штучных штрихкодов." "Штрихкод не сформирован.';uk='Немає вільних кодів в доступних діапазонах штучних штрихкодів." "Штрихкод не сформований.'") КонецФункции
Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда ДанныеШтрихкода = Новый Структура("Номенклатура, Характеристика, Партия"); ЗаполнитьЗначенияСвойств(ДанныеШтрихкода, Выборка); Возврат ДанныеШтрихкода; Иначе Возврат Неопределено; КонецЕсли;
Если Константы.ИспользоватьНеуникальныеШтрихКоды.Получить() Тогда
Результат.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 | ШтрихкодыНоменклатуры.Штрихкод КАК Штрихкод, | ШтрихкодыНоменклатуры.Номенклатура КАК Номенклатура, | ШтрихкодыНоменклатуры.Характеристика КАК Характеристика, | ШтрихкодыНоменклатуры.Партия КАК Партия, | ПРЕДСТАВЛЕНИЕ(ШтрихкодыНоменклатуры.Номенклатура) КАК НоменклатураПредставление, | ПРЕДСТАВЛЕНИЕ(ШтрихкодыНоменклатуры.Характеристика) КАК ХарактеристикаПредставление, | ПРЕДСТАВЛЕНИЕ(ШтрихкодыНоменклатуры.Партия) КАК ПартияПредставление, | ШтрихкодыНоменклатуры.ЕдиницаИзмерения КАК ЕдиницаИзмерения |ИЗ | РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры |ГДЕ | ШтрихкодыНоменклатуры.Штрихкод = &Штрихкод | И ШтрихкодыНоменклатуры.Номенклатура = &Номенклатура | И ШтрихкодыНоменклатуры.Характеристика = &Характеристика | И ШтрихкодыНоменклатуры.Партия = &Партия | И ШтрихкодыНоменклатуры.ЕдиницаИзмерения = &ЕдиницаИзмерения";
Результат.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 | ШтрихкодыНоменклатуры.Штрихкод, | ШтрихкодыНоменклатуры.Номенклатура, | ШтрихкодыНоменклатуры.Характеристика, | ШтрихкодыНоменклатуры.Партия, | ПРЕДСТАВЛЕНИЕ(ШтрихкодыНоменклатуры.Номенклатура) КАК НоменклатураПредставление, | ПРЕДСТАВЛЕНИЕ(ШтрихкодыНоменклатуры.Характеристика) КАК ХарактеристикаПредставление, | ПРЕДСТАВЛЕНИЕ(ШтрихкодыНоменклатуры.Партия) КАК ПартияПредставление |ИЗ | РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры |ГДЕ | ШтрихкодыНоменклатуры.Штрихкод = &Штрихкод";
КонецЕсли;
Возврат Результат
КонецФункции
#КонецОбласти
#Область ГенерацияШтрихкодов
// Функция вычисляет контрольный символ кода EAN // // Параметры: // ШтрихКод - штрихкод (без контрольной цифры) // Тип - тип штрихкода: 13 - EAN13, 8 - EAN8 // // Возвращаемое значение: // Контрольный символ штрихкода // Функция КонтрольныйСимволEAN(Знач ШтрихКод, Знач Тип)
Четное = 0; Нечетное = 0;
КоличествоИтераций = ?(Тип = 13, 6, 4);
Для Индекс = 1 По КоличествоИтераций Цикл Если (Тип = 8) И (Индекс = КоличествоИтераций) Тогда Иначе Четное = Четное + Сред(ШтрихКод, 2 * Индекс, 1); КонецЕсли; Нечетное = Нечетное + Сред(ШтрихКод, 2 * Индекс - 1, 1); КонецЦикла;
Если Тип = 13 Тогда Четное = Четное * 3; Иначе Нечетное = Нечетное * 3; КонецЕсли;
ОписаниеТипаЧисла = Новый ОписаниеТипов("Число"); Результат = ОписаниеТипаЧисла.ПривестиЗначение(Выборка.Код);
Возврат Результат;
КонецФункции
Функция ПоследнийКодШтучногоТовара(ПрефиксШтучногоТовара, ПрефиксВнутреннегоШтрихкода, EAN) Экспорт
Запрос = Новый Запрос;
Если EAN = 8 Тогда Запрос.Текст = "ВЫБРАТЬ | МАКСИМУМ(ПОДСТРОКА(ШтрихкодыНоменклатуры.Штрихкод, 2, 6)) КАК Код |ИЗ | РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры |ГДЕ | ШтрихкодыНоменклатуры.Штрихкод ПОДОБНО &ШаблонШтрихкод"; ШаблонШтрихкод = "2_______"; ИначеЕсли EAN = 13 Тогда Запрос.Текст = "ВЫБРАТЬ | МАКСИМУМ(ПОДСТРОКА(ШтрихкодыНоменклатуры.Штрихкод, 5, 8)) КАК Код |ИЗ | РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры |ГДЕ | ШтрихкодыНоменклатуры.Штрихкод ПОДОБНО &ШаблонШтрихкод"; ШаблонШтрихкод = СтрШаблон("2%1%2_________", ПрефиксШтучногоТовара, ПрефиксВнутреннегоШтрихкода); Иначе ВызватьИсключение НСтр("ru='Недопустимая длина EAN. Ожидается 8 или 13.';uk='Неприпустима довжина EAN. Очікується 8 або 13.'"); КонецЕсли;
ОписаниеТипаЧисла = Новый ОписаниеТипов("Число"); Результат = ОписаниеТипаЧисла.ПривестиЗначение(Выборка.Код);
Возврат Результат;
КонецФункции
Функция ПолучитьШтрихкодПоКоду(Код, ПрефиксШтучногоТовара, ПрефиксВнутреннегоШтрихкода, EAN) Экспорт
Если EAN = 8 Тогда Штрихкод = СтрШаблон("2%1", Формат(Код, "ЧЦ=6; ЧВН=; ЧГ=")); ИначеЕсли EAN = 13 Тогда Штрихкод = СтрШаблон("2%1%2%3", ПрефиксШтучногоТовара, ПрефиксВнутреннегоШтрихкода, Формат(Код, "ЧЦ=8; ЧВН=; ЧГ=")); Иначе ВызватьИсключение НСтр("ru='Недопустимая длина EAN. Ожидается 8 или 13.';uk='Неприпустима довжина EAN. Очікується 8 або 13.'") КонецЕсли; Результат = СтрШаблон("%1%2", Штрихкод, КонтрольныйСимволEAN(ШтрихКод, EAN));
Возврат Результат;
КонецФункции
// Функция возвращает штрихкод весового товара, // создаваемый из кода с префиксом весового товара и контрольным символом // // Параметры: // Код - Код // ПрефиксВесовогоТовара - Строка // // Возвращаемое значение: // Строка // Функция ПолучитьШтрихкодВесовогоТовараПоКоду(Код, ПрефиксВесовогоТовара) Экспорт
// Функция возвращает максимальное значение штрихкода числом // // Параметры: // ПрефиксВесовогоТовара - Строка // // Возвращаемое значение: // Число // Функция ПоследнийКодВесовогоТовара(Знач ПрефиксВесовогоТовара) Экспорт
Запрос = Новый Запрос( "ВЫБРАТЬ | МАКСИМУМ(ПОДСТРОКА(ШтрихкодыНоменклатуры.Штрихкод, 3, 5)) КАК Код |ИЗ | РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры |ГДЕ | ШтрихкодыНоменклатуры.Штрихкод ПОДОБНО &ФорматШтрихкода");
Зробив по іншому, вивожу сповіщення після закриття і коли нажимають НІ, видаляю запис. А коли нажимають просто Записати - то виводиться повідомлення. Так і не знайшов рішення для ПередЗаписью
Код:
&НаКлиенте Процедура ПродолжитьЗаписьДубля(Ответ, ДопПараметры) Экспорт Если Ответ = КодВозвратаДиалога.Да Тогда Возврат; Иначе УдалитьЗаписьНаСервере();
Функция ЕстьДубликатШтрихкода(Штрихкод, Номенклатура)
Запрос = Новый Запрос( "ВЫБРАТЬ ПЕРВЫЕ 1 | Номенклатура |ИЗ РегистрСведений.ШтрихкодыНоменклатуры |ГДЕ Штрихкод = &Штрихкод | И Номенклатура <> &Номенклатура" ); Запрос.УстановитьПараметр("Штрихкод", Штрихкод); Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
Результат = Запрос.Выполнить().Выбрать(); Если Результат.Следующий() Тогда Возврат "Штрихкод вже використовується для номенклатури """ + Результат.Номенклатура + """"; КонецЕсли;
ПоказатьВопрос( Новый ОписаниеОповещения("ПродолжитьЗаписьДубля", ЭтаФорма), ОписаниеОшибки + Символы.ПС + "Продовжити запис незважаючи на збіг?", РежимДиалогаВопрос.ДаНет );
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!