&НаКлиенте Перем НеВызыватьВС, МаркаТовара; &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) ТекущийОбъект.ТоварыТолькоКоличество.Загрузить(ТоварыВирт.Выгрузить()); КонецПроцедуры &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Объект.ПоставкиМП.Количество() > 0 Тогда СсылкиПоставкиМП = Объект.ПоставкиМП.Выгрузить().ВыгрузитьКолонку("ПоставкаМП"); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ПоставкаМПТовары.Количество КАК Количество, | ПоставкаМПТовары.Отсканировано КАК Отсканировано, | ПоставкаМПТовары.КодМП КАК КодМП, | ПоставкаМПТовары.ШтрихкодПоставки КАК ШтрихкодПоставки, | ПоставкаМПТовары.КарточкаМП.Ссылка КАК КарточкаМП, | ПоставкаМПТовары.Ссылка.Номер КАК Номер, | ПоставкаМПТовары.Ячейка КАК Ячейка |ИЗ | Документ.ПоставкаМП.Товары КАК ПоставкаМПТовары |ГДЕ | ПоставкаМПТовары.Ссылка В(&СписокЗначений)"; Запрос.УстановитьПараметр("СписокЗначений", СсылкиПоставкиМП); ТоварыВирт.Загрузить(Запрос.Выполнить().Выгрузить()); Для Каждого строка Из ТоварыВирт Цикл СтруктураПоиска = Новый Структура(); СтруктураПоиска.Вставить("КарточкаМП", строка.КарточкаМП); СтруктураПоиска.Вставить("КодМП", строка.КодМП); ТовКол=Объект.ТоварыТолькоКоличество.НайтиСтроки(СтруктураПоиска); Если ТовКол <> Неопределено И ТовКол.Количество() > 0 Тогда строка.Отсканировано = ТовКол[0].Отсканировано; строка.МаркаСтрока = ТовКол[0].МаркаСтрока; строка.МаркаПредставление = ПредставлениеКодаМаркировкиНаСервере(ТовКол[0].МаркаСтрока); КонецЕсли; КонецЦикла; КонецЕсли; ПечататьШКТовара=Истина; КонецПроцедуры &НаКлиенте Процедура ВнешнееСобытие(Источник, Событие, Данные) // Каким то непонятным методом вызывается два раза внешнее событие // на этой форме из другой формы. сделали через переменную Если НеВызыватьВС Тогда НеВызыватьВС = Ложь; Возврат; конецесли; МаркаТовара = Неопределено; МаркетПлейс=ИдентификаторМаркетПлейса(); // Это максимальный костыль. При закрытии второй формы не отрабатывает функция ВводДоступен() // на это форме из Windows клиента. ХЗ почему. Пока работаем так #Если НЕ МобильноеПриложениеКлиент Тогда Если ЭтаФорма.ИмяФормы = "Документ.СтикеровкаМП.Форма.ФормаДокумента" Тогда #Иначе Если ВводДоступен() тогда #КонецЕсли Если Событие="Штрихкод" Тогда // это поставка маркета CODE128 // Код маркировки (DataMatrix): достаём ШК товара (GTIN→EAN13) и сохраняем КМ в Base64 Если ЭтоКодМаркировки(Данные) Тогда РезультатРазбора = РазобратьКодМаркировки(Данные); Если Не ЗначениеЗаполнено(РезультатРазбора.ШтрихкодТовара) Тогда ФайлЗвука = ПолучитьАдресФайла("еррор"); #Если МобильноеПриложениеКлиент Тогда СредстваМультимедиа.ВоспроизвестиАудио(ФайлЗвука); #КонецЕсли Сообщить("Не удалось извлечь ШК товара из кода маркировки"); Возврат; КонецЕсли; МаркаТовара = РезультатРазбора.КодBase64; Данные = РезультатРазбора.ШтрихкодТовара; КонецЕсли; Если НЕ СтрДлина(Данные)=13 ИЛИ СтрДлина(Данные)=13 И СтрНайти(Данные, "-") > 0 Тогда // Обрежем штрихкод поставки яндекса Если МаркетПлейс="YA" Тогда Данные=ПривестиСтрокуВПорядок(Данные, "-"); postingNumber=Данные; тов=ТоварыВирт.НайтиСтроки(новый Структура("КодМП",postingNumber)); // Отправим запрос по api в ОЗОН для получения поставки ИначеЕсли МаркетПлейс="OZ" Тогда ДанныеОтвета=СинхронизацияУТ.ЗапросДанныеДляМаркетов(Объект.Ссылка, Данные); postingNumber=ДанныеОтвета.result.posting_number; тов=ТоварыВирт.НайтиСтроки(новый Структура("КодМП",postingNumber)); ИначеЕсли МаркетПлейс="WB" ИЛИ МаркетПлейс="FB" Тогда postingNumber=Данные; тов=ТоварыВирт.НайтиСтроки(новый Структура("ШтрихкодПоставки",postingNumber)); КонецЕсли; Если тов <> неопределено И тов.Количество() > 0 Тогда Если тов[0].Отсканировано= тов[0].Количество тогда ФайлЗвука = ПолучитьАдресФайла("еррор"); #Если МобильноеПриложениеКлиент Тогда СредстваМультимедиа.ВоспроизвестиАудио(ФайлЗвука); #КонецЕсли Сообщить("Данную поставку уже отсканированили"); возврат; конецЕсли; ПараметрыОткрытия=Новый структура(); ПараметрыОткрытия.Вставить("КодМП", тов[0].КодМП); ПараметрыОткрытия.Вставить("НомерПоставкиМП", тов[0].Номер); ПараметрыОткрытия.Вставить("ДокументОснование", Объект.Ссылка); ПараметрыОткрытия.Вставить("СтатусКодаВПоставке", "Данная поставка найдена в документе"); ПараметрыОткрытия.Вставить("Подсказка1", "Отсканируйте штрихкод товара в поставке"); ПараметрыОткрытия.Вставить("ном", неопределено); ПараметрыОткрытия.Вставить("ЕстьПоставка", Истина); ПараметрыОткрытия.Вставить("ЕстьТовар", ложь); ПараметрыОткрытия.Вставить("Маркет", МаркетПлейс); ФайлЗвука = ПолучитьАдресФайла("ок"); #Если МобильноеПриложениеКлиент Тогда СредстваМультимедиа.ВоспроизвестиАудио(ФайлЗвука); #КонецЕсли // СинхронизацияУТ.РаспечататьКодПоставкиНаПринтере(тов[0].КодМП); ОткрытьФорму("Документ.СтикеровкаМП.Форма.ПодборПоставкиТовара", ПараметрыОткрытия, ЭтаФорма); иначе ФайлЗвука = ПолучитьАдресФайла("еррор"); #Если МобильноеПриложениеКлиент Тогда СредстваМультимедиа.ВоспроизвестиАудио(ФайлЗвука); #КонецЕсли Сообщить("Данной поставки нет в документе!"); возврат; КонецЕсли; ИначеЕсли СтрДлина(Данные)=13 Тогда МассивДляПечати = Новый Массив(); идент = НайтиНомВБазе(Данные); если идент <> Неопределено Тогда тов = ТоварыВирт.НайтиПоИдентификатору(идент); КонецЕсли; если тов <> неопределено Тогда Если ОпредМаркТовара(тов.КарточкаМП) И МаркаТовара = Неопределено Тогда ФайлЗвука = ПолучитьАдресФайла("еррор"); #Если МобильноеПриложениеКлиент Тогда СредстваМультимедиа.ВоспроизвестиАудио(ФайлЗвука); #КонецЕсли Сообщить("Это маркированый товар. Отсканируйте марку"); Возврат; КонецЕсли; если тов.Отсканировано= тов.Количество тогда ФайлЗвука = ПолучитьАдресФайла("еррор"); #Если МобильноеПриложениеКлиент Тогда СредстваМультимедиа.ВоспроизвестиАудио(ФайлЗвука); #КонецЕсли Сообщить("Данный товар в поставке уже отсканированили"); возврат; конецесли; ПараметрыОткрытия=Новый структура(); ПараметрыОткрытия.Вставить("КодМП", "Не определен"); ПараметрыОткрытия.Вставить("НомерПоставкиМП", тов.Номер); ПараметрыОткрытия.Вставить("ДокументОснование", Объект.Ссылка); ПараметрыОткрытия.Вставить("СтатусКодаВПоставке", "Данный товар найден в документе"); ПараметрыОткрытия.Вставить("Подсказка1", "Отсканируйте qr-код поставки"); ПараметрыОткрытия.Вставить("ном", тов.КарточкаМП); ПараметрыОткрытия.Вставить("ЕстьТовар", Истина); ПараметрыОткрытия.Вставить("Маркет", МаркетПлейс); ПараметрыОткрытия.Вставить("ЕстьПоставка", ложь); Если МаркаТовара <> Неопределено Тогда ПараметрыОткрытия.Вставить("КодМаркировки",МаркаТовара); КонецЕсли; ФайлЗвука = ПолучитьАдресФайла("ок"); СтруктураПечати=Новый Структура; СтруктураПечати.Вставить("Ссылка",строка(Объект.Ссылка.УникальныйИдентификатор())); СтруктураПечати.Вставить("ПечататьШКТовара", ПечататьШКТовара); МассивДляПечати.Добавить(тов.КодМП); СтруктураПечати.Вставить("СписокКодМП",МассивДляПечати); Если МаркаТовара <> Неопределено Тогда СтруктураПечати.Вставить("КодМаркировки",МаркаТовара); КонецЕсли; СинхронизацияУТ.РаспечататьКодПоставкиНаПринтере(СтруктураПечати); #Если МобильноеПриложениеКлиент Тогда СредстваМультимедиа.ВоспроизвестиАудио(ФайлЗвука); #КонецЕсли ОткрытьФорму("Документ.СтикеровкаМП.Форма.ПодборПоставкиТовара", ПараметрыОткрытия, ЭтаФорма); иначе ФайлЗвука = ПолучитьАдресФайла("еррор"); #Если МобильноеПриложениеКлиент Тогда СредстваМультимедиа.ВоспроизвестиАудио(ФайлЗвука); #КонецЕсли Сообщить("Такого товара нет в документе либо по нему все отсканировали"); КонецЕсли; Конецесли; конецесли; КонецЕсли; КонецПроцедуры Функция НайтиНомВБазе(штрих) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ШтрихкодыУпаковок.Номенклатура.Ссылка КАК НоменклатураСсылка |ИЗ | РегистрСведений.ШтрихкодыУпаковок КАК ШтрихкодыУпаковок |ГДЕ | ШтрихкодыУпаковок.Штрихкод = &Штрихкод | И ТИПЗНАЧЕНИЯ(ШтрихкодыУпаковок.Номенклатура.Ссылка) = ТИП(Справочник.КарточкиМП)"; Запрос.УстановитьПараметр("Штрихкод", штрих); РезультатЗапроса = Запрос.Выполнить().Выгрузить(); Если РезультатЗапроса.Количество()>0 Тогда Для Каждого строка из РезультатЗапроса Цикл СтрПоиск= Новый Структура(); СтрПоиск.Вставить("КарточкаМП",строка.НоменклатураСсылка); СтрПоиск.Вставить("Отсканировано", 0); тов=ТоварыВирт.НайтиСтроки(СтрПоиск); Если тов <> неопределено И тов.Количество() > 0 Тогда возврат тов[0].ПолучитьИдентификатор(); КонецЕсли; КонецЦикла; КонецЕсли; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ШтрихкодыУпаковок.Номенклатура.Ссылка КАК НоменклатураСсылка |ИЗ | РегистрСведений.ШтрихкодыУпаковок КАК ШтрихкодыУпаковок |ГДЕ | ШтрихкодыУпаковок.Штрихкод = &Штрихкод | И ТИПЗНАЧЕНИЯ(ШтрихкодыУпаковок.Номенклатура.Ссылка) = ТИП(Справочник.Номенклатура)"; Запрос.УстановитьПараметр("Штрихкод", Штрих); РезультатЗапроса = Запрос.Выполнить().Выгрузить(); Если РезультатЗапроса.Количество() > 0 Тогда Запрос1 = Новый Запрос; Запрос1.Текст = "ВЫБРАТЬ | КарточкиМП.Ссылка КАК Ссылка |ИЗ | Справочник.КарточкиМП КАК КарточкиМП |ГДЕ | КарточкиМП.Номенклатура = &Номенклатура"; Запрос1.УстановитьПараметр("Номенклатура", РезультатЗапроса[0].НоменклатураСсылка); РезультатЗапроса1 = Запрос1.Выполнить().Выгрузить(); Для Каждого строка из РезультатЗапроса1 Цикл СтрПоиск= Новый Структура(); СтрПоиск.Вставить("КарточкаМП",строка.Ссылка); СтрПоиск.Вставить("Отсканировано", 0); тов=ТоварыВирт.НайтиСтроки(СтрПоиск); если тов <> неопределено И тов.Количество() > 0 Тогда Возврат тов[0].ПолучитьИдентификатор(); КОнецЕсли; КонецЦикла; КонецЕсли; КонецФункции &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) если ИмяСобытия="НашлиТоварВПоставке" Тогда НеВызыватьВС=истина; структураПоиска=Новый структура(); если Параметр.Свойство("КодМП") И ЗначениеЗаполнено(Параметр.КодМП) И Параметр.КодМП <> "Не определен" Тогда структураПоиска.Вставить("КодМП", Параметр.КодМП); КонецЕсли; если Параметр.Свойство("ШтрихкодПоставки") И ЗначениеЗаполнено(Параметр.ШтрихкодПоставки) Тогда структураПоиска.Вставить("ШтрихкодПоставки", Параметр.ШтрихкодПоставки); КонецЕсли; структураПоиска.Вставить("КарточкаМП", Параметр.Номенклатура); тов=ТоварыВирт.НайтиСтроки(структураПоиска); Если тов <> неопределено И тов.Количество() > 0 Тогда Для каждого элемент из тов цикл если элемент.Отсканировано >= элемент.Количество Тогда Продолжить; КонецЕсли; элемент.Отсканировано = элемент.Отсканировано + 1; если Параметр.Свойство("КодМаркировки") И ЗначениеЗаполнено(Параметр.КодМаркировки) И Параметр.КодМаркировки <> "-" Тогда элемент.МаркаСтрока = Параметр.КодМаркировки; элемент.МаркаПредставление = ПредставлениеКодаМаркировки(Параметр.КодМаркировки); КонецЕсли; Элементы.ТоварыВиртНаФорме.ТекущаяСтрока = элемент.ПолучитьИдентификатор(); ФайлЗвука = ПолучитьАдресФайла("ок"); #Если МобильноеПриложениеКлиент Тогда СредстваМультимедиа.ВоспроизвестиАудио(ФайлЗвука); #КонецЕсли Прервать; КонецЦикла; Иначе Сообщить("Не удалось обновить строку товара в документе"); КонецЕсли; ИначеЕсли ИмяСобытия="НЕнашлиТоварВПоставке" Тогда Сообщить("Нет соотвествия товара и поставки в данном документе!"); НеВызыватьВС=истина; ФайлЗвука = ПолучитьАдресФайла("еррор"); #Если МобильноеПриложениеКлиент Тогда СредстваМультимедиа.ВоспроизвестиАудио(ФайлЗвука); #КонецЕсли КонецЕсли; КонецПроцедуры &НаКлиенте Функция ЭтоКодМаркировки(Знач ДанныеСкана) ДанныеСкана = СокрЛП(Строка(ДанныеСкана)); Если Не ЗначениеЗаполнено(ДанныеСкана) Тогда Возврат Ложь; КонецЕсли; // Уже Base64-строка марки (из печати/повторного скана) Если СтрДлина(ДанныеСкана) > 40 И СтрНайти(ДанныеСкана, "=") > 0 И СтрНайти("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", Лев(ДанныеСкана, 1)) > 0 Тогда Попытка Декод = ПолучитьСтрокуИзДвоичныхДанных(Base64Значение(ДанныеСкана)); Если СтрДлина(Декод) > 20 И Лев(Декод, 2) = "01" Тогда Возврат Истина; КонецЕсли; Исключение КонецПопытки; КонецЕсли; Возврат СтрДлина(ДанныеСкана) > 20 И Лев(ДанныеСкана, 2) = "01"; КонецФункции &НаКлиенте Функция РазобратьКодМаркировки(Знач ДанныеСкана) Результат = Новый Структура("ШтрихкодТовара, КодBase64, Представление", "", "", ""); ДанныеСкана = СокрЛП(Строка(ДанныеСкана)); СыройКод = ДанныеСкана; // Если пришла уже Base64 — декодируем для разбора GTIN Если СтрДлина(ДанныеСкана) > 40 И СтрНайти(ДанныеСкана, "=") > 0 Тогда Попытка Декод = ПолучитьСтрокуИзДвоичныхДанных(Base64Значение(ДанныеСкана)); Если СтрДлина(Декод) > 20 И Лев(Декод, 2) = "01" Тогда СыройКод = Декод; Результат.КодBase64 = СтрЗаменить(СтрЗаменить(ДанныеСкана, Символы.ПС, ""), Символы.ВК, ""); КонецЕсли; Исключение КонецПопытки; КонецЕсли; Если Не ЗначениеЗаполнено(Результат.КодBase64) Тогда Результат.КодBase64 = ЗакодироватьМаркуВ64(ПолучитьДвоичныеДанныеИзСтроки(СыройКод)); КонецЕсли; // AI 01 + GTIN-14 → EAN-13 = 13 цифр начиная с позиции 4 (без ведущей цифры GTIN) Гтин14 = ""; Если Лев(СыройКод, 2) = "01" И СтрДлина(СыройКод) >= 16 Тогда Гтин14 = Сред(СыройКод, 3, 14); КонецЕсли; ШтрихкодТовара = ""; Если СтрДлина(Гтин14) = 14 Тогда ШтрихкодТовара = Сред(Гтин14, 2, 13); // типичный EAN-13 из GTIN-14 Если Не ЭтоЦифровойШтрихкод(ШтрихкодТовара) Тогда ШтрихкодТовара = ""; КонецЕсли; КонецЕсли; Если Не ЗначениеЗаполнено(ШтрихкодТовара) И СтрДлина(СыройКод) >= 16 Тогда Кандидат = Сред(СыройКод, 4, 13); Если ЭтоЦифровойШтрихкод(Кандидат) Тогда ШтрихкодТовара = Кандидат; КонецЕсли; КонецЕсли; Результат.ШтрихкодТовара = ШтрихкодТовара; Результат.Представление = ПредставлениеСырогоКодаМаркировки(СыройКод); Возврат Результат; КонецФункции &НаКлиенте Функция ЭтоЦифровойШтрихкод(Знач СтрокаШК) СтрокаШК = СокрЛП(Строка(СтрокаШК)); Если СтрДлина(СтрокаШК) <> 13 Тогда Возврат Ложь; КонецЕсли; Для Индекс = 1 По 13 Цикл Если СтрНайти("0123456789", Сред(СтрокаШК, Индекс, 1)) = 0 Тогда Возврат Ложь; КонецЕсли; КонецЦикла; Возврат Истина; КонецФункции &НаКлиенте Функция ПредставлениеСырогоКодаМаркировки(Знач СыройКод) Текст = СтрЗаменить(Строка(СыройКод), Символ(29), " "); Текст = СтрЗаменить(Текст, Символы.ПС, " "); Текст = СтрЗаменить(Текст, Символы.ВК, " "); Если СтрДлина(Текст) > 80 Тогда Возврат Лев(Текст, 77) + "..."; КонецЕсли; Возврат Текст; КонецФункции &НаКлиенте Функция ПредставлениеКодаМаркировки(Знач КодBase64) Если Не ЗначениеЗаполнено(КодBase64) Или КодBase64 = "-" Тогда Возврат ""; КонецЕсли; Попытка СыройКод = ПолучитьСтрокуИзДвоичныхДанных(Base64Значение(КодBase64)); Возврат ПредставлениеСырогоКодаМаркировки(СыройКод); Исключение Возврат Лев(Строка(КодBase64), 40); КонецПопытки; КонецФункции &НаКлиенте Функция ПолучитьШкТовараИзМарки(данные) // Совместимость: возвращает только ШК, Base64 кладёт в МаркаТовара РезультатРазбора = РазобратьКодМаркировки(данные); МаркаТовара = РезультатРазбора.КодBase64; Возврат РезультатРазбора.ШтрихкодТовара; КонецФункции &НаКлиенте Функция ЗакодироватьМаркуВ64(ДД) // Взято из БСП Base64 = Base64Строка(ДД); Base64 = СтрЗаменить(Base64, Символы.ПС, ""); Base64 = СтрЗаменить(Base64, Символы.ВК, ""); Возврат Base64; КонецФункции &НаСервереБезКонтекста Функция ПредставлениеКодаМаркировкиНаСервере(Знач КодBase64) Если Не ЗначениеЗаполнено(КодBase64) Или КодBase64 = "-" Тогда Возврат ""; КонецЕсли; Попытка СыройКод = ПолучитьСтрокуИзДвоичныхДанных(Base64Значение(КодBase64)); Текст = СтрЗаменить(Строка(СыройКод), Символ(29), " "); Текст = СтрЗаменить(Текст, Символы.ПС, " "); Текст = СтрЗаменить(Текст, Символы.ВК, " "); Если СтрДлина(Текст) > 80 Тогда Возврат Лев(Текст, 77) + "..."; КонецЕсли; Возврат Текст; Исключение Возврат Лев(Строка(КодBase64), 40); КонецПопытки; КонецФункции &НаКлиенте Процедура ПриОткрытии(Отказ) НеВызыватьВС=ложь; КонецПроцедуры Функция ПривестиСтрокуВПорядок(Строка, СтрокаПоиска) ДлинаСтрокиПоиска = СтрДлина(СтрокаПоиска)-1; ПозицияСтрокиПоиска = СтрНайти(Строка, СтрокаПоиска); если ПозицияСтрокиПоиска=0 тогда возврат Строка; конецесли; ДлинаСтроки = ПозицияСтрокиПоиска + ДлинаСтрокиПоиска - 1; НоваяСтрока = Лев(Строка, ДлинаСтроки); возврат НоваяСтрока; КонецФункции &НаСервере Функция ПолучитьАдресФайла(ТипМакета) Данные = ПолучитьОбщийМакет(ТипМакета); Возврат Данные; КонецФункции &НаКлиенте Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка) Если НЕ Объект.Проведен Тогда //Если ОбъектМодифицирован(Объект.Ссылка) Тогда // Сообщить("Сохраните документ!"); // Отказ=Истина; //КонецЕсли; КонецЕсли КонецПроцедуры Функция ОбъектМодифицирован(СсылкаОбъект, ПроверятьТабличныеЧасти = Истина, ПроверятьСтандартные = Истина) Объект.ТоварыТолькоКоличество.Загрузить(ТоварыВирт.Выгрузить()); Ссылка = СсылкаОбъект; Метаданное = СсылкаОбъект.Метаданные(); Для каждого Реквизит из Метаданное.Реквизиты Цикл Если Объект[Реквизит.Имя] <> Ссылка[Реквизит.Имя] Тогда Возврат Истина; КонецЕсли; КонецЦикла; Если ПроверятьСтандартные Тогда Для каждого Реквизит из Метаданное.СтандартныеРеквизиты Цикл Если Объект[Реквизит.Имя] <> Ссылка[Реквизит.Имя] Тогда Возврат Истина; КонецЕсли; КонецЦикла; КонецЕсли; Если ПроверятьТабличныеЧасти Тогда Для каждого ТЧ из Метаданное.ТабличныеЧасти Цикл Если Объект[ТЧ.Имя].Количество() <> Ссылка[ТЧ.Имя].Количество() Тогда Возврат Истина; КонецЕсли; Для Индекс = 0 по Объект[ТЧ.Имя].Количество()-1 Цикл ОбъектСтрокаТЧ = Объект[ТЧ.Имя][Индекс]; СсылкаСтрокаТЧ = Ссылка[ТЧ.Имя][Индекс]; Для каждого РеквизитТЧ из ТЧ.Реквизиты Цикл Если ОбъектСтрокаТЧ[РеквизитТЧ.Имя] <> СсылкаСтрокаТЧ[РеквизитТЧ.Имя] Тогда Возврат Истина; КонецЕсли; КонецЦикла; КонецЦикла; КонецЦикла; КонецЕсли; Возврат Ложь; КонецФункции &НаСервере Функция ИдентификаторМаркетПлейса() МК=Лев(Объект.ПоставкиМП[0].ПоставкаМП.Номер, 2); возврат МК; КонецФункции Функция ОпредМаркТовара(Товар) Возврат Товар.МаркировкаМП; КонецФункции