Функция GetArrayDoc() // Получаем документы из базы и отправляем из на ТСД СписокСборкиXDTO = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19", "Документ.СборкаМП.Список"));; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | СборкаМП.Ссылка КАК Ссылка, | СборкаМП.Дата КАК Дата |ИЗ | Документ.СборкаМП КАК СборкаМП |ГДЕ | СборкаМП.Дата МЕЖДУ &Дата1 И &Дата2 | И СборкаМП.Проведен = ИСТИНА | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | СтикеровкаМП.Ссылка, | СтикеровкаМП.Дата |ИЗ | Документ.СтикеровкаМП КАК СтикеровкаМП |ГДЕ | СтикеровкаМП.Дата МЕЖДУ &Дата1 И &Дата2 | И СтикеровкаМП.Проведен = ИСТИНА | |УПОРЯДОЧИТЬ ПО | Дата"; Запрос.УстановитьПараметр("Дата1", НачалоДня(ТекущаяДата() - 60*60*24*1)); Запрос.УстановитьПараметр("Дата2", КонецДня(ТекущаяДата())); РезультатЗапроса = Запрос.Выполнить().Выгрузить(); Если РезультатЗапроса.Количество() > 0 Тогда Для Каждого строка Из РезультатЗапроса Цикл Если строка.Ссылка.Поставки.Количество() = 0 Тогда Продолжить; КонецЕсли; ДокСборкиXDTO=ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19", "Документ.СборкаМП")); ДокСборкиXDTO.Ссылка = строка(строка.Ссылка.УникальныйИдентификатор()); ДокСборкиXDTO.Дата = строка.Ссылка.Дата; ДокСборкиXDTO.Номер = строка.Ссылка.Номер; ДокСборкиXDTO.ТипДокумента = строка(ТипЗнч(строка.ссылка)); Для Каждого строка Из строка.Ссылка.Поставки Цикл ЗаявкаXDTO=ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19", "Документ.ПоступлениеТоваровУслуг")); КлючевыеСвойства=ФабрикаXDTO.Создать(ФабрикаXDTO.Тип( "http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19", "КлючевыеСвойстваПоступлениеТоваровУслуг")); КлючевыеСвойстваКонтрагент=ФабрикаXDTO.Создать(ФабрикаXDTO.Тип( "http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19", "КлючевыеСвойстваКонтрагент")); Товары=ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19", "Документ.ПоступлениеТоваровУслуг.Товары")); // Документ ПоставкаМП СсылкаМП=строка.ПоставкаМП; КлючевыеСвойства.ссылка=Строка(СсылкаМП.УникальныйИдентификатор()); КлючевыеСвойства.номер=СсылкаМП.номер; КлючевыеСвойства.дата=СсылкаМП.дата; КлючевыеСвойстваКонтрагент.Ссылка=строка(СсылкаМП.Интеграция.Клиент.УникальныйИдентификатор()); КлючевыеСвойстваКонтрагент.Наименование=СсылкаМП.Интеграция.Клиент.Наименование; колстрок = 0; Для Каждого Товар Из СсылкаМП.Заказы Цикл Строка=ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19", "Документ.ПоступлениеТоваровУслуг.Товары.Строка")); колстрок=колстрок + 1; Строка.НомерСтрокиДокумента=колстрок; // Номенклатура ДанныеНоменклатуры=ФабрикаXDTO.Создать(ФабрикаXDTO.Тип( "http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19", "ОбщиеСвойстваДанныеНоменклатуры")); ДанныеНоменклатуры.Номенклатура=ФабрикаXDTO.Создать(ФабрикаXDTO.Тип( "http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19", "КлючевыеСвойстваНоменклатура")); ДанныеНоменклатуры.Номенклатура.Ссылка=Строка(Товар.КарточкаМП.Номенклатура.УникальныйИдентификатор()); СтроковыйМассивШтрихкодовНом = ПолучитьШтрихНом(Товар.КарточкаМП.Номенклатура); ДанныеНоменклатуры.Штрихкод = СтроковыйМассивШтрихкодовНом; ДанныеНоменклатуры.Номенклатура.Наименование=Товар.КарточкаМП.Номенклатура.Наименование; ДанныеНоменклатуры.Номенклатура.Артикул = Товар.КарточкаМП.Номенклатура.Артикул; ДанныеНоменклатуры.Номенклатура.МаркировкаМП = Товар.КарточкаМП.Номенклатура.МаркировкаМП; КомплектацияНоменклатуры = ПолучитьКомплектНоменклатуры(Товар.КарточкаМП.Номенклатура); // Карточка МП ДанныеКарточкиМП=ФабрикаXDTO.Создать(ФабрикаXDTO.Тип( "http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19", "ОбщиеСвойстваДанныеНоменклатуры")); ДанныеКарточкиМП.Номенклатура=ФабрикаXDTO.Создать(ФабрикаXDTO.Тип( "http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19", "КлючевыеСвойстваНоменклатура")); ДанныеКарточкиМП.Номенклатура.Ссылка=Строка(Товар.КарточкаМП.УникальныйИдентификатор()); СтроковыйМассивШтрихкодовКарточки = ПолучитьШтрихНомКарточкиМП(Товар.КарточкаМП); ДанныеКарточкиМП.Штрихкод = СтроковыйМассивШтрихкодовКарточки; ДанныеКарточкиМП.Номенклатура.Наименование=Товар.КарточкаМП.Наименование; Строка.ДанныеНоменклатуры=ДанныеНоменклатуры; Строка.Количество=Товар.Количество; Строка.СчетУчета = Товар.КодМП; Если значениезаполнено(Товар.ШтрихкодПоставки) Тогда Строка.СчетУчетаНДС = Товар.ШтрихкодПоставки; Иначе Строка.СчетУчетаНДС = "0"; КонецЕсли; Строка.ДанныеКарточкиМП=ДанныеКарточкиМП; Строка.КомплектацияНоменклатуры=КомплектацияНоменклатуры; Если ЗначениеЗаполнено(Товар.Ячейка) Тогда Строка.Ячейка=Товар.Ячейка.Наименование; Иначе Строка.Ячейка="-"; КонецЕсли; Товары.Строка.Добавить(Строка); КонецЦикла; ЗаявкаXDTO.КлючевыеСвойства=КлючевыеСвойства; ЗаявкаXDTO.КонтрагентСтороннейКомпании=КлючевыеСвойстваКонтрагент; ЗаявкаXDTO.Товары=Товары; ДокСборкиXDTO.ДокПоставкаМП.Добавить(ЗаявкаXDTO); КонецЦикла; СписокСборкиXDTO.ДокСборкиМП.Добавить(ДокСборкиXDTO); КонецЦикла; КонецЕсли; Возврат СписокСборкиXDTO; КонецФункции Функция ПолучитьКомплектНоменклатуры(СсылкаНом) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | КомплектацииНоменклатуры.Ссылка КАК Ссылка, | КомплектацииНоменклатуры.Состав.( | НомерСтроки КАК НомерСтроки, | Ссылка КАК Ссылка, | ДоляСтоимости КАК ДоляСтоимости, | ЕдиницаИзмерения КАК ЕдиницаИзмерения, | Количество КАК Количество, | КоличествоПродукции КАК КоличествоПродукции, | Номенклатура КАК Номенклатура, | Описание КАК Описание, | Характеристика КАК Характеристика) КАК Состав |ИЗ | Справочник.КомплектацииНоменклатуры КАК КомплектацииНоменклатуры |ГДЕ | КомплектацииНоменклатуры.Владелец = &Владелец"; Запрос.УстановитьПараметр("Владелец", СсылкаНом); РезультатЗапроса = Запрос.Выполнить().Выгрузить(); Если РезультатЗапроса.Количество() > 0 Тогда КомплектXTDO = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19", "Справочник.КомплектацииНом")); Для Каждого строка Из РезультатЗапроса Цикл СтрокаКомплект = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19", "Справочник.КомплектацииНом.Строка")); СтрокаКомплект.ВладелецСсылка = Строка(СсылкаНом.УникальныйИдентификатор()); СтрокаКомплект.Ссылка = Строка(строка.ссылка.УникальныйИдентификатор()); СтрокаКомплект.НаименованиеКомплекта = строка.Ссылка.Наименование; ТаблицаСоставаXTDO = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19", "Справочник.КомплектацииНом.ТаблицаСостава")); Для Каждого элемент Из строка.Состав Цикл //@skip-check query-in-loop ТаблицаСоставаXTDOСтрока = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19", "Справочник.КомплектацииНом.ТаблицаСостава.Строка")); ТаблицаСоставаXTDOСтрока.Номенклатура=ПолучитьНоменклатуруXDTO(элемент.Номенклатура); ТаблицаСоставаXTDOСтрока.Количество=элемент.Количество; ТаблицаСоставаXTDOСтрока.КоличествоКомплектов=элемент.КоличествоПродукции; ТаблицаСоставаXTDO.Строка.Добавить(ТаблицаСоставаXTDOСтрока); КонецЦикла; СтрокаКомплект.ТаблицаСостава = ТаблицаСоставаXTDO; КомплектXTDO.Строка.Добавить(СтрокаКомплект); КонецЦикла; Возврат КомплектXTDO; Иначе Возврат Неопределено; КонецЕсли; КонецФункции Функция getDoc(barcode) // Выгружаем Док ПоставкаМП Если СтрДлина(barcode)>2 Тогда //Ищем по номеру Ссылки=Новый Массив; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 | ПоставкаМП.Ссылка КАК Ссылка |ИЗ | Документ.ПоставкаМП КАК ПоставкаМП |ГДЕ | ПоставкаМП.Номер ПОДОБНО &Номер | |УПОРЯДОЧИТЬ ПО | ПоставкаМП.Дата УБЫВ"; Запрос.УстановитьПараметр("Номер", "%"+barcode); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Ссылки.Добавить(ВыборкаДетальныеЗаписи.Ссылка); КонецЦикла; иначе //Ищем по шк документа Ссылки=НайтиДокПоНомеруПоставки(barcode); //ШтрихкодированиеПечатныхФормВызовСервера.СсылкаПоШтрихкодуТабличногоДокумента(barcode, Неопределено); КонецЕсли; ЗаявкаXDTO=ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19", "Документ.ПоступлениеТоваровУслуг")); КлючевыеСвойства=ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19", "КлючевыеСвойстваПоступлениеТоваровУслуг")); КлючевыеСвойстваКонтрагент=ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19", "КлючевыеСвойстваКонтрагент")); Товары=ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19", "Документ.ПоступлениеТоваровУслуг.Товары")); Если Ссылки.Количество()>0 Тогда Ссылка=Ссылки[0]; КлючевыеСвойства.ссылка=Строка(ссылка.УникальныйИдентификатор()); КлючевыеСвойства.номер=Ссылка.номер; КлючевыеСвойства.дата=Ссылка.дата; КлючевыеСвойстваКонтрагент.Ссылка=строка(Ссылка.Интеграция.Клиент.УникальныйИдентификатор()); КлючевыеСвойстваКонтрагент.Наименование=Ссылка.Интеграция.Клиент.Наименование; колстрок = 0; Для каждого Товар из Ссылка.Заказы Цикл Строка=ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19", "Документ.ПоступлениеТоваровУслуг.Товары.Строка")); колстрок=колстрок+1; Строка.НомерСтрокиДокумента=колстрок; ДанныеНоменклатуры=ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19", "ОбщиеСвойстваДанныеНоменклатуры")); ДанныеНоменклатуры.Номенклатура=ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19", "КлючевыеСвойстваНоменклатура")); ДанныеНоменклатуры.Номенклатура.Ссылка=Строка(Товар.Номенклатура.УникальныйИдентификатор()); СтроковыйМассивШтрихкодов = ПолучитьШтрихНом(Товар.Номенклатура); ДанныеНоменклатуры.Штрихкод = СтроковыйМассивШтрихкодов; ДанныеНоменклатуры.Номенклатура.Наименование=Товар.Номенклатура.Наименование; ДанныеКарточкиМП=ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19", "ОбщиеСвойстваДанныеНоменклатуры")); ДанныеКарточкиМП.Номенклатура=ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19", "КлючевыеСвойстваНоменклатура")); ДанныеКарточкиМП.Номенклатура.Ссылка=Строка(Товар.КарточкаМП.УникальныйИдентификатор()); СтроковыйМассивШтрихкодов = ПолучитьШтрихНомКарточкиМП(Товар.КарточкаМП); ДанныеКарточкиМП.Штрихкод = СтроковыйМассивШтрихкодов; ДанныеКарточкиМП.Номенклатура.Наименование=Товар.КарточкаМП.Наименование; Строка.Количество=Товар.Количество; Строка.ДанныеНоменклатуры=ДанныеНоменклатуры; Строка.ДанныеКарточкиМП=ДанныеКарточкиМП; Строка.СчетУчета = Товар.КодМП; если значениезаполнено(Товар.ШтрихкодПоставки) тогда Строка.СчетУчетаНДС = Товар.ШтрихкодПоставки; иначе Строка.СчетУчетаНДС = "0"; конецесли; Товары.Строка.Добавить(Строка); КонецЦикла; Иначе КлючевыеСвойства.ссылка=Строка(Документы.ПоставкаМП.ПустаяСсылка().УникальныйИдентификатор()); КонецЕсли; ЗаявкаXDTO.КлючевыеСвойства=КлючевыеСвойства; ЗаявкаXDTO.КонтрагентСтороннейКомпании=КлючевыеСвойстваКонтрагент; ЗаявкаXDTO.Товары=Товары; Возврат ЗаявкаXDTO; КонецФункции &НаСервере Функция setDoc(xmldoc) // получаем с ТСД изменный док СборкаМП и Стикеровка МП Если xmldoc.КлючевыеСвойства.ТипДокумента = "Сборка МП" Тогда СборкаМП=Документы.СборкаМП.ПолучитьСсылку(Новый УникальныйИдентификатор(xmldoc.КлючевыеСвойства.ссылка)); Если Не ЗначениеЗаполнено(СборкаМП) Тогда Возврат Ложь; КонецЕсли; СборкаМП=СборкаМП.ПолучитьОбъект(); СборкаМП.Исполнитель=Справочники.Пользователи.ПолучитьСсылку( Новый УникальныйИдентификатор(xmldoc.Подразделение.Ссылка)); Для Каждого строка Из xmldoc.Товары.строка Цикл ном = Справочники.Номенклатура.ПолучитьСсылку( Новый УникальныйИдентификатор(строка.ДанныеНоменклатуры.Номенклатура.ссылка)); тов = СборкаМП.Товары.Найти(ном, "Номенклатура"); Если тов <> Неопределено Тогда тов.Факт = строка.Количество; // Полностью перезаписываем количество Иначе тов=СборкаМП.Товары.Добавить(); тов.Номенклатура=ном; тов.Факт=строка.Количество; КонецЕсли; КонецЦикла; СборкаМП.Записать(); Возврат Истина; ИначеЕсли xmldoc.КлючевыеСвойства.ТипДокумента = "Стикеровка МП" Тогда СтикеровкаМП=Документы.СтикеровкаМП.ПолучитьСсылку( Новый УникальныйИдентификатор(xmldoc.КлючевыеСвойства.ссылка)); Если Не ЗначениеЗаполнено(СтикеровкаМП) Тогда Возврат Ложь; КонецЕсли; СтикеровкаМП=СтикеровкаМП.ПолучитьОбъект(); СтикеровкаМП.Исполнитель=Справочники.Пользователи.ПолучитьСсылку( Новый УникальныйИдентификатор(xmldoc.Подразделение.Ссылка)); Для Каждого строка Из xmldoc.Товары.строка Цикл ном = Справочники.КарточкиМП.ПолучитьСсылку( Новый УникальныйИдентификатор(строка.ДанныеНоменклатуры.Номенклатура.ссылка)); КодМП = строка.ЕдиницаИзмерения.Ссылка; ШтрихкодПоставки = ""; Попытка ШтрихкодПоставки = СокрЛП(Строка(строка.ЕдиницаИзмерения.ДанныеКлассификатора.Код)); Исключение КонецПопытки; СтруктураПоиска = Новый Структура; СтруктураПоиска.Вставить("КодМП", КодМП); СтруктураПоиска.Вставить("КарточкаМП", ном); КодМаркировки = ПолучитьКодМаркировкиИзСтрокиXDTO(строка); Если ЗначениеЗаполнено(КодМаркировки) Тогда ПоставкаМПСсылка = ПолучитьСсылкуПоставкиМПИзСтрокиXDTO(строка); Если ЗначениеЗаполнено(ПоставкаМПСсылка) Тогда ЗаполнитьКодМаркировкиВПоставкеМП(КодМП, ном, КодМаркировки, ПоставкаМПСсылка, ШтрихкодПоставки); Иначе Для Каждого СсыльМП из СтикеровкаМП.Поставки Цикл Рез = ЗаполнитьКодМаркировкиВПоставкеМП(КодМП, ном, КодМаркировки, СсыльМП.ПоставкаМП, ШтрихкодПоставки); Если Рез Тогда Прервать; КонецЕсли; КонецЦикла; КонецЕсли; КонецЕсли; тов = СтикеровкаМП.Заказы.НайтиСтроки(СтруктураПоиска); Если тов <> Неопределено И тов.Количество() > 0 Тогда тов[0].Количество = строка.Количество; // Полностью перезаписываем количество Иначе тов=СтикеровкаМП.Заказы.Добавить(); тов.КарточкаМП=ном; тов.Количество=строка.Количество; тов.КодМП=КодМП; тов.ШтрихкодПоставки=ШтрихкодПоставки; КонецЕсли; КонецЦикла; СтикеровкаМП.Записать(); Возврат Истина; ИначеЕсли xmldoc.КлючевыеСвойства.ТипДокумента = "ПеремещениеПоЯчейкам" Тогда ЗаписатьПеремещениеПоЯчейкамИзТСД(xmldoc); Возврат "true"; КонецЕсли; КонецФункции Функция getNom() МассивОбъектов = Новый Массив; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Номенклатура.Ссылка КАК Ссылка, | Номенклатура.Наименование КАК Наименование |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | НЕ Номенклатура.ПометкаУдаления | И НЕ Номенклатура.ЭтоГруппа"; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл СтрокаШК = ПолучитьШтрихНом(Выборка.Ссылка); Если Не ЗначениеЗаполнено(СтрокаШК) Или СтрокаШК = "0" Тогда Продолжить; КонецЕсли; Элемент = НовыйЭлементОтветаТСД(); ДобавитьСвойствоОтветаТСД(Элемент, Строка(Выборка.Ссылка.УникальныйИдентификатор())); ДобавитьСвойствоОтветаТСД(Элемент, "Номенклатура"); ДобавитьСвойствоОтветаТСД(Элемент, Выборка.Наименование); ДобавитьСвойствоОтветаТСД(Элемент, СтрокаШК); ДобавитьСвойствоОтветаТСД(Элемент, ""); МассивОбъектов.Добавить(Элемент); КонецЦикла; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | КарточкиМП.Ссылка КАК Ссылка, | КарточкиМП.Наименование КАК Наименование, | КарточкиМП.Номенклатура КАК Номенклатура |ИЗ | Справочник.КарточкиМП КАК КарточкиМП |ГДЕ | НЕ КарточкиМП.ПометкаУдаления"; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл СтрокаШК = ПолучитьШтрихНомКарточкиМП(Выборка.Ссылка); Если Не ЗначениеЗаполнено(СтрокаШК) Или СтрокаШК = "0" Тогда Продолжить; КонецЕсли; Элемент = НовыйЭлементОтветаТСД(); ДобавитьСвойствоОтветаТСД(Элемент, Строка(Выборка.Ссылка.УникальныйИдентификатор())); ДобавитьСвойствоОтветаТСД(Элемент, "КарточкиМП"); ДобавитьСвойствоОтветаТСД(Элемент, Выборка.Наименование); ДобавитьСвойствоОтветаТСД(Элемент, СтрокаШК); Если ЗначениеЗаполнено(Выборка.Номенклатура) Тогда ДобавитьСвойствоОтветаТСД(Элемент, Строка(Выборка.Номенклатура.УникальныйИдентификатор())); Иначе ДобавитьСвойствоОтветаТСД(Элемент, ""); КонецЕсли; МассивОбъектов.Добавить(Элемент); КонецЦикла; Возврат УпаковатьОтветТСДВстроку(МассивОбъектов); КонецФункции Функция ПолучитьНоменклатуруXDTO(СcылкаНом) ДанныеНоменклатуры=ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19", "ОбщиеСвойстваДанныеНоменклатуры")); ДанныеНоменклатуры.Номенклатура=ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19", "КлючевыеСвойстваНоменклатура")); ДанныеНоменклатуры.Номенклатура.Ссылка=Строка(СcылкаНом.УникальныйИдентификатор()); ДанныеНоменклатуры.Номенклатура.Наименование=СcылкаНом.Наименование; СтроковыйМассивШтрихкодовНом = ПолучитьШтрихНом(СcылкаНом); ДанныеНоменклатуры.Штрихкод = СтроковыйМассивШтрихкодовНом; Если ЗначениеЗаполнено(СcылкаНом.Родитель) тогда ДанныеНоменклатуры.Номенклатура.Группа=ПолучитьГруппаXDTO(СcылкаНом.Родитель); КонецЕсли; Возврат ДанныеНоменклатуры; КонецФункции Функция ПолучитьГруппаXDTO(СcылкаНом) ДанныеГруппа=ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19", "КлючевыеСвойстваНоменклатураГруппа")); ДанныеГруппа.КодВПрограмме=СcылкаНом.Код; ДанныеГруппа.Наименование=СcылкаНом.Наименование; ДанныеГруппа.Ссылка=Строка(СcылкаНом.УникальныйИдентификатор()); Если ЗначениеЗаполнено(СcылкаНом.Родитель) Тогда ДанныеГруппа.Группа=ПолучитьГруппаXDTO(СcылкаНом.Родитель); КонецЕсли; Возврат ДанныеГруппа; КонецФункции Функция getDocInvent(barcode) // Выгружаем Док инвентаризация Если СтрДлина(barcode)<12 Тогда //Ищем по номеру Ссылки=Новый Массив; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 | ИнвентаризацияЗапасов.Ссылка КАК Ссылка |ИЗ | Документ.ИнвентаризацияЗапасов КАК ИнвентаризацияЗапасов |ГДЕ | ИнвентаризацияЗапасов.Номер ПОДОБНО &Номер | |УПОРЯДОЧИТЬ ПО | ИнвентаризацияЗапасов.Дата УБЫВ"; Запрос.УстановитьПараметр("Номер", "%"+barcode); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Ссылки.Добавить(ВыборкаДетальныеЗаписи.Ссылка); КонецЦикла; иначе //Ищем по ШК Ссылки=ШтрихкодированиеПечатныхФормВызовСервера.СсылкаПоШтрихкодуТабличногоДокумента(barcode, Неопределено); КонецЕсли; ЗаявкаXDTO=ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19", "Документ.ИнвентаризацияТоваров")); КлючевыеСвойства=ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19", "КлючевыеСвойстваИнвентаризацияТоваров")); Товары=ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19", "Документ.ИнвентаризацияТоваров.Товары")); Если Ссылки.Количество()>0 Тогда Ссылка=Ссылки[0]; КлючевыеСвойства.ссылка=Строка(ссылка.УникальныйИдентификатор()); КлючевыеСвойства.номер=Ссылка.номер; КлючевыеСвойства.дата=Ссылка.дата; Для каждого Товар из Ссылка.Запасы Цикл Строка=ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19", "Документ.ИнвентаризацияТоваров.Товары.Строка")); Строка.НомерСтрокиДокумента=Товар.НомерСтроки; ДанныеНоменклатуры=ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19", "ОбщиеСвойстваДанныеНоменклатуры")); ДанныеНоменклатуры.Номенклатура=ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19", "КлючевыеСвойстваНоменклатура")); ДанныеНоменклатуры.Номенклатура.Ссылка=Строка(Товар.Номенклатура.УникальныйИдентификатор()); /// ЕдИзмерНом = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19", "КлючевыеСвойстваЕдиницаИзмерения")); ДанныеКлассиф = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19", "ОбщиеСвойстваДанныеКлассификатора")); ДанныеКлассиф.Код = Товар.ЕдиницаИзмерения.Код; ДанныеКлассиф.Наименование = Товар.ЕдиницаИзмерения.Наименование; ЕдИзмерНом.Ссылка = Строка(Товар.Номенклатура.ЕдиницаИзмерения.УникальныйИдентификатор()); ЕдИзмерНом.ДанныеКлассификатора = ДанныеКлассиф; /// СтроковыйМассивШтрихкодов = ПолучитьШтрихНом(Товар.Номенклатура); ДанныеНоменклатуры.Штрихкод = СтроковыйМассивШтрихкодов; ДанныеНоменклатуры.Номенклатура.Наименование=Товар.Номенклатура.Наименование; ДанныеНоменклатуры.SKU = ЦенаНом(Товар.Номенклатура); Строка.КоличествоУчет=Товар.КоличествоУчет; Строка.ДанныеНоменклатуры=ДанныеНоменклатуры; Строка.ЕдиницаИзмерения = ЕдИзмерНом; Товары.Строка.Добавить(Строка); КонецЦикла; Иначе КлючевыеСвойства.ссылка=Строка(Документы.ИнвентаризацияТоваров.ПустаяСсылка().УникальныйИдентификатор()); КонецЕсли; ЗаявкаXDTO.КлючевыеСвойства=КлючевыеСвойства; ЗаявкаXDTO.Товары=Товары; Возврат ЗаявкаXDTO; КонецФункции Функция УпаковатьОтветТСДВстроку(МассивValue) Экспорт ЗаписьXML = Новый ЗаписьXML; ЗаписьXML.УстановитьСтроку(); ЗаписьXML.ЗаписатьНачалоЭлемента("response"); Для Каждого Элемент Из МассивValue Цикл ЗаписьXML.ЗаписатьНачалоЭлемента("Value"); Для Каждого Свойство Из Элемент.Property Цикл ЗаписьXML.ЗаписатьНачалоЭлемента("Property"); ЗаписьXML.ЗаписатьНачалоЭлемента("Value"); ЗаписьXML.ЗаписатьТекст(Строка(Свойство.Value)); ЗаписьXML.ЗаписатьКонецЭлемента(); // Value ЗаписьXML.ЗаписатьКонецЭлемента(); // Property КонецЦикла; ЗаписьXML.ЗаписатьКонецЭлемента(); // Value КонецЦикла; ЗаписьXML.ЗаписатьКонецЭлемента(); // response Возврат ЗаписьXML.Закрыть(); КонецФункции Функция setDocInvent(xmldoc) // получаем с ТСД изменный док инвент ИнвентДок=Документы.ИнвентаризацияЗапасов.ПолучитьСсылку(Новый УникальныйИдентификатор(xmldoc.КлючевыеСвойства.ссылка)); Если не ЗначениеЗаполнено(ИнвентДок) Тогда Возврат Ложь; КонецЕсли; ИнвентДок=ИнвентДок.ПолучитьОбъект(); Для каждого строка из xmldoc.Товары.Строка цикл ном = Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(строка.ДанныеНоменклатуры.Номенклатура.ссылка)); тов = ИнвентДок.Запасы.Найти(ном, "Номенклатура"); Если тов <> Неопределено Тогда тов.Количество = строка.Количество; КонецЕсли; КонецЦикла; ИнвентДок.Записать(); Возврат Истина; КонецФункции Функция ПолучитьШтрихНомКарточкиМП(ном) МассивСтрок = ""; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ШтрихкодыМП.Штрихкод КАК Штрихкод |ИЗ | РегистрСведений.ШтрихкодыМП КАК ШтрихкодыМП |ГДЕ | ШтрихкодыМП.КарточкаМП.Ссылка = &Ссылка"; Запрос.УстановитьПараметр("Ссылка", ном); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл МассивСтрок = МассивСтрок + ВыборкаДетальныеЗаписи.Штрихкод + ";"; КонецЦикла; Если СтрДлина(МассивСтрок) > 3 Тогда Возврат МассивСтрок; Иначе Возврат МассивСтрок="0"; КонецЕсли; КонецФункции Функция ПолучитьШтрихНом(ном) МассивСтрок = ""; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ШтрихкодыНоменклатуры.Штрихкод КАК Штрихкод |ИЗ | РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры |ГДЕ | ШтрихкодыНоменклатуры.Номенклатура.Ссылка = &Ссылка"; Запрос.УстановитьПараметр("Ссылка", ном); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл МассивСтрок = МассивСтрок + ВыборкаДетальныеЗаписи.Штрихкод + ";"; КонецЦикла; Если СтрДлина(МассивСтрок) > 3 Тогда Возврат МассивСтрок; Иначе Возврат МассивСтрок="0"; КонецЕсли; КонецФункции Процедура ЗаписатьПеремещениеПоЯчейкамИзТСД(ДанныеДокумента) Экспорт КС = ДанныеДокумента.КлючевыеСвойства; ДокТСДUUID = НормUUID(КС.Ссылка); Склад = СсылкаПоUUID(Справочники.СтруктурныеЕдиницы, ДанныеДокумента.СтруктурнаяЕдиница); ВидОперации = ВидОперацииПеремещенияПоЯчейкамИзТСД(ДанныеДокумента.ВидОперации); ДатаДокумента = XMLЗначение(Тип("Дата"), Строка(КС.Дата)); Организация = Неопределено; Попытка ОрганизацияUUID = ""; Попытка ОрганизацияUUID = КС.Организация.Ссылка; Исключение ОрганизацияUUID = КС.Организация; КонецПопытки; Организация = СсылкаПоUUID(Справочники.Организации, ОрганизацияUUID); Исключение КонецПопытки; Автор = Неопределено; Попытка Автор = СсылкаПоUUID(Справочники.Сотрудники, ДанныеДокумента.Автор); Если Не ЗначениеЗаполнено(Автор) Тогда Автор = СсылкаПоUUID(Справочники.Пользователи, ДанныеДокумента.Автор); КонецЕсли; Исключение КонецПопытки; СтрокиЗапасов = СтрокиЗапасовИзДанныхТСД(ДанныеДокумента); Если СтрокиЗапасов.Количество() = 0 Тогда Возврат; КонецЕсли; ТаблицаСтрок = Новый ТаблицаЗначений; ТаблицаСтрок.Колонки.Добавить("ЯчейкаИсточникUUID", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(36))); ТаблицаСтрок.Колонки.Добавить("ЯчейкаНазначенияUUID", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(36))); ТаблицаСтрок.Колонки.Добавить("НоменклатураUUID", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(36))); ТаблицаСтрок.Колонки.Добавить("ПартияUUID", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(36))); ТаблицаСтрок.Колонки.Добавить("ЕдиницаUUID", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(36))); ТаблицаСтрок.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3))); ТаблицаСтрок.Колонки.Добавить("Штрихкод", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(200))); Для Каждого Стр Из СтрокиЗапасов Цикл НовСтр = ТаблицаСтрок.Добавить(); НовСтр.ЯчейкаИсточникUUID = НормUUID(Стр.ЯчейкаИсточник); НовСтр.ЯчейкаНазначенияUUID = НормUUID(Стр.Ячейка); НовСтр.НоменклатураUUID = НормUUID(Стр.Номенклатура); НовСтр.ПартияUUID = НормUUID(Стр.Партия); НовСтр.ЕдиницаUUID = НормUUID(Стр.ЕдиницаИзмерения); НовСтр.Количество = Число(Стр.Количество); Попытка НовСтр.Штрихкод = Строка(Стр.Штрихкод); Исключение НовСтр.Штрихкод = ""; КонецПопытки; КонецЦикла; ТаблицаСтрок.Сортировать("ЯчейкаИсточникUUID, НоменклатураUUID, ЯчейкаНазначенияUUID"); ТекущийИсточникUUID = Неопределено; ДокОбъект = Неопределено; Для Каждого СтрТЗ Из ТаблицаСтрок Цикл Если Не ЗначениеЗаполнено(СтрТЗ.ЯчейкаИсточникUUID) Или СтрТЗ.ЯчейкаИсточникUUID = ПустойUUID() Тогда Продолжить; КонецЕсли; Если ТекущийИсточникUUID <> СтрТЗ.ЯчейкаИсточникUUID Тогда ЗаписатьДокументПеремещенияПоЯчейкам(ДокОбъект); ТекущийИсточникUUID = СтрТЗ.ЯчейкаИсточникUUID; ДокОбъект = ПолучитьИлиСоздатьДокументПеремещенияПоЯчейкам( ДокТСДUUID, ТекущийИсточникUUID); ДокОбъект.Дата = ДатаДокумента; ДокОбъект.СтруктурнаяЕдиница = Склад; ДокОбъект.ВидОперации = ВидОперации; ДокОбъект.Ячейка = СсылкаПоUUID(Справочники.Ячейки, ТекущийИсточникUUID); Если ЗначениеЗаполнено(Организация) Тогда Попытка ДокОбъект.Организация = Организация; Исключение КонецПопытки; КонецЕсли; Если ЗначениеЗаполнено(Автор) Тогда Попытка ДокОбъект.Автор = Автор; Исключение КонецПопытки; КонецЕсли; ДокОбъект.Запасы.Очистить(); КонецЕсли; НовСтр = ДокОбъект.Запасы.Добавить(); НовСтр.Номенклатура = СсылкаПоUUID(Справочники.Номенклатура, СтрТЗ.НоменклатураUUID); НовСтр.Партия = СсылкаПоUUID(Справочники.ПартииНоменклатуры, СтрТЗ.ПартияUUID); НовСтр.Количество = СтрТЗ.Количество; НовСтр.Ячейка = СсылкаПоUUID(Справочники.Ячейки, СтрТЗ.ЯчейкаНазначенияUUID); Попытка НовСтр.ЕдиницаИзмерения = СсылкаПоUUID(Справочники.КлассификаторЕдиницИзмерения, СтрТЗ.ЕдиницаUUID); Исключение Попытка НовСтр.ЕдиницаИзмерения = СсылкаПоUUID(Справочники.ЕдиницыИзмерения, СтрТЗ.ЕдиницаUUID); Исключение КонецПопытки; КонецПопытки; Попытка НовСтр.Штрихкод = СтрТЗ.Штрихкод; Исключение КонецПопытки; КонецЦикла; ЗаписатьДокументПеремещенияПоЯчейкам(ДокОбъект); КонецПроцедуры Функция ПолучитьИлиСоздатьДокументПеремещенияПоЯчейкам(ДокТСДUUID, ЯчейкаИсточникUUID) UID = UUIDДокументаУНФИзТСД(ДокТСДUUID, ЯчейкаИсточникUUID); СсылкаДок = Документы.ПеремещениеПоЯчейкам.ПолучитьСсылку(Новый УникальныйИдентификатор(UID)); ДокОбъект = СсылкаДок.ПолучитьОбъект(); Если ДокОбъект = Неопределено Тогда ДокОбъект = Документы.ПеремещениеПоЯчейкам.СоздатьДокумент(); ДокОбъект.УстановитьСсылкуНового(СсылкаДок); ИначеЕсли ДокОбъект.Проведен Тогда ДокОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения); КонецЕсли; Возврат ДокОбъект; КонецФункции Функция СтрокиЗапасовИзДанныхТСД(ДанныеДокумента) Результат = Новый Массив; СтрокиЗапасов = Неопределено; Попытка СтрокиЗапасов = ДанныеДокумента.Запасы.Строка; Исключение Возврат Результат; КонецПопытки; Если СтрокиЗапасов = Неопределено Тогда Возврат Результат; КонецЕсли; Если ТипЗнч(СтрокиЗапасов) = Тип("СписокXDTO") Или ТипЗнч(СтрокиЗапасов) = Тип("Массив") Тогда Для Каждого Стр Из СтрокиЗапасов Цикл Результат.Добавить(Стр); КонецЦикла; Иначе Результат.Добавить(СтрокиЗапасов); КонецЕсли; Возврат Результат; КонецФункции Функция ДатаИзЗначенияТСД(ЗначениеДаты) Если ТипЗнч(ЗначениеДаты) = Тип("Дата") Тогда Возврат ЗначениеДаты; КонецЕсли; СтрокаДаты = СокрЛП(Строка(ЗначениеДаты)); Если Не ЗначениеЗаполнено(СтрокаДаты) Тогда Возврат ТекущаяДатаСеанса(); КонецЕсли; Попытка Возврат XMLЗначение(Тип("Дата"), СтрокаДаты); Исключение КонецПопытки; Попытка Возврат Дата(СтрокаДаты); Исключение КонецПопытки; Попытка Части = СтрРазделить(СтрЗаменить(СтрокаДаты, "T", " "), " "); Если Части.Количество() >= 1 Тогда ДМГ = СтрРазделить(Части[0], "."); Если ДМГ.Количество() = 3 Тогда Год = Число(ДМГ[2]); Месяц = Число(ДМГ[1]); День = Число(ДМГ[0]); Час = 0; Мин = 0; Сек = 0; Если Части.Количество() >= 2 Тогда Время = СтрРазделить(Части[1], ":"); Если Время.Количество() >= 1 Тогда Час = Число(Время[0]); КонецЕсли; Если Время.Количество() >= 2 Тогда Мин = Число(Время[1]); КонецЕсли; Если Время.Количество() >= 3 Тогда Сек = Число(Время[2]); КонецЕсли; КонецЕсли; Возврат Дата(Год, Месяц, День, Час, Мин, Сек); КонецЕсли; КонецЕсли; Исключение КонецПопытки; Возврат ТекущаяДатаСеанса(); КонецФункции Функция ВидОперацииПеремещенияПоЯчейкамИзТСД(ЗначениеИзТСД) Текст = СокрЛП(Строка(ЗначениеИзТСД)); Если ВРег(Текст) = ВРег("ИзНесколькихВОдну") Или СтрНайти(ВРег(Текст), "ИЗ НЕСКОЛЬКИХ") > 0 Тогда Возврат Перечисления.ВидыОперацийПеремещениеПоЯчейкам.ИзНесколькихВОдну; КонецЕсли; Возврат Перечисления.ВидыОперацийПеремещениеПоЯчейкам.ИзОднойВНесколько; КонецФункции Функция НормUUID(ЗначениеUUID) СтрокаUUID = ВРег(СокрЛП(Строка(ЗначениеUUID))); Если Не ЗначениеЗаполнено(СтрокаUUID) Тогда Возврат ПустойUUID(); КонецЕсли; Возврат СтрокаUUID; КонецФункции Функция СсылкаПоUUID(Менеджер, ЗначениеUUID) СтрокаUUID = НормUUID(ЗначениеUUID); Если СтрокаUUID = ПустойUUID() Тогда Возврат Менеджер.ПустаяСсылка(); КонецЕсли; Возврат Менеджер.ПолучитьСсылку(Новый УникальныйИдентификатор(СтрокаUUID)); КонецФункции Функция UUIDДокументаУНФИзТСД(ДокТСДUUID, ЯчейкаИсточникUUID) Экспорт Хеш = Новый ХешированиеДанных(ХешФункция.MD5); Хеш.Добавить(ВРег(СокрЛП(Строка(ДокТСДUUID))) + "|" + ВРег(СокрЛП(Строка(ЯчейкаИсточникUUID)))); Хекс = СтрЗаменить(ВРег(Строка(Хеш.ХешСумма)), " ", ""); Возврат Лев(Хекс, 8) + "-" + Сред(Хекс, 9, 4) + "-" + Сред(Хекс, 13, 4) + "-" + Сред(Хекс, 17, 4) + "-" + Сред(Хекс, 21, 12); КонецФункции Процедура ЗаписатьДокументПеремещенияПоЯчейкам(ДокОбъект) Если ДокОбъект = Неопределено Тогда Возврат; КонецЕсли; Если ДокОбъект.Запасы.Количество() = 0 Тогда Возврат; КонецЕсли; ДокОбъект.Записать(РежимЗаписиДокумента.Проведение); КонецПроцедуры Функция ВернутьСписокНовойНом() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | УстановкаЦенНоменклатурыЗапасы.Номенклатура.Ссылка КАК НоменклатураСсылка |ИЗ | Документ.УстановкаЦенНоменклатуры.Запасы КАК УстановкаЦенНоменклатурыЗапасы |ГДЕ | УстановкаЦенНоменклатурыЗапасы.Ссылка.Дата МЕЖДУ &Дата1 И &Дата2 | И УстановкаЦенНоменклатурыЗапасы.Ссылка.Проведен = ИСТИНА"; Запрос.УстановитьПараметр("Дата1", началодня(ТекущаяДата())); Запрос.УстановитьПараметр("Дата2", конецдня(ТекущаяДата())); РезультатЗапроса = Запрос.Выполнить().Выгрузить(); возврат РезультатЗапроса; КонецФункции Функция ЦенаНом(ном) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЦеныНоменклатурыСрезПоследних.Цена КАК Цена |ИЗ | РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних |ГДЕ | ЦеныНоменклатурыСрезПоследних.Номенклатура.Ссылка = &Ссылка | И ЦеныНоменклатурыСрезПоследних.Цена > 0 | |СГРУППИРОВАТЬ ПО | ЦеныНоменклатурыСрезПоследних.Цена"; Запрос.УстановитьПараметр("Ссылка", ном); РезультатЗапроса = Запрос.Выполнить().Выгрузить(); если РезультатЗапроса.Количество()> 0 Тогда возврат РезультатЗапроса[0].Цена; иначе возврат 0; КонецЕсли; КонецФункции Функция НайтиДокПоНомеруПоставки(НомерПоставки) КонецФункции Функция GetUsers() МассивОбъектов=Новый Массив; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Пользователи.Ссылка КАК Ссылка |ИЗ | Справочник.Пользователи КАК Пользователи |ГДЕ | Пользователи.ПометкаУдаления = &ПометкаУдаления"; Запрос.УстановитьПараметр("ПометкаУдаления", Ложь); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Если ВыборкаДетальныеЗаписи.Ссылка.Наименование = "<Не указан>" Тогда Продолжить; КОнецЕсли; ПользXML = Новый Структура; ПользXML.Вставить("Ссылка", строка(ВыборкаДетальныеЗаписи.Ссылка.УникальныйИдентификатор())); ПользXML.Вставить("Наименование", ВыборкаДетальныеЗаписи.Ссылка.Наименование); ПользXML.Вставить("Пароль", ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору (ВыборкаДетальныеЗаписи.Ссылка.ИдентификаторПользователяИБ).СохраняемоеЗначениеПароля); МассивОбъектов.Добавить(ПользXML); КонецЦикла; ОбъектXDTO = СериализаторXDTO.ЗаписатьXDTO(МассивОбъектов); Возврат ОбъектXDTO; КонецФункции Функция setDocBarcode(xmldoc) // получаем с ТСД документы с штрихкодами ВидыПродукции = Новый Массив(); ВидыПродукции.Добавить(Справочники.ВидыПродукцииИС.НайтиПоНаименованию("Корма для животных (влажные)")); ВидыПродукции.Добавить(Справочники.ВидыПродукцииИС.НайтиПоНаименованию("Корма для животных (сухие)")); ВидыПродукции.Добавить(Справочники.ВидыПродукцииИС.НайтиПоНаименованию("Консервы")); ВидыПродукции.Добавить(Справочники.ВидыПродукцииИС.НайтиПоНаименованию("Спортивное питание")); ВидыПродукции.Добавить(Справочники.ВидыПродукцииИС.НайтиПоНаименованию("БАДы 2.0")); ВидыПродукции.Добавить(Справочники.ВидыПродукцииИС.НайтиПоНаименованию("БАД-ы")); ВидыПродукции.Добавить(Справочники.ВидыПродукцииИС.НайтиПоНаименованию("Напитки с содержанием молока, какао, прочие")); ВидыПродукции.Добавить(Справочники.ВидыПродукцииИС.НайтиПоНаименованию("Моторные масла")); ВидыПродукции.Добавить(Справочники.ВидыПродукцииИС.НайтиПоНаименованию("Молочная продукция")); Попытка ДокШК = Документы.ПулШтрихкодов.НайтиПоНомеру(xmldoc.Номер); // ищем по номеру, т.к. переодичности нет Если ДокШК = Документы.ПулШтрихкодов.ПустаяСсылка() Тогда ДокШк = Документы.ПулШтрихкодов.СоздатьДокумент(); ДокШк.Номер = xmldoc.Номер; ДокШк.Дата = Дата(СтрЗаменить(СтрЗаменить(СтрЗаменить(xmldoc.Дата, "T", ""), "-", ""), ":", "")); Иначе ДокШк = ДокШк.ПолучитьОбъект(); ДокШк.Штрихкоды.Очистить(); КонецЕсли; // Перезапишем только штрихкоды Если ТипЗнч(xmldoc.Штрихкоды.строка) = Тип("СписокXDTO") Тогда Для Каждого строка из xmldoc.Штрихкоды.строка Цикл Шк = ДокШк.Штрихкоды.Добавить(); Шк.Штрихкод64 = строка.ШтрихкодКодир; Если СтрДлина(ПолучитьСтрокуИзДвоичныхДанных(Base64Значение(строка.ШтрихкодКодир))) > 13 Тогда МаркаРазб = ПолучитьСтрокуИзДвоичныхДанных(Base64Значение(строка.ШтрихкодКодир)); СтруктураРазбора = ШтрихкодированиеОбщегоНазначенияИС.НоваяСтруктураОбработкиШтрихкода(МаркаРазб, ВидыПродукции); Шк.Штрихкод = СтруктураРазбора.НормализованныйШтрихкод; Иначе Шк.Штрихкод = ПолучитьСтрокуИзДвоичныхДанных(Base64Значение(строка.ШтрихкодКодир)); КонецЕсли; КонецЦикла; ИначеЕсли ТипЗнч(xmldoc.Штрихкоды.строка) = Тип("ОбъектXDTO") Тогда Шк = ДокШк.Штрихкоды.Добавить(); Шк.Штрихкод64 = xmldoc.Штрихкоды.строка.ШтрихкодКодир; Если СтрДлина(ПолучитьСтрокуИзДвоичныхДанных(Base64Значение(xmldoc.Штрихкоды.строка.ШтрихкодКодир))) > 13 Тогда МаркаРазб = ПолучитьСтрокуИзДвоичныхДанных(Base64Значение(xmldoc.Штрихкоды.строка.ШтрихкодКодир)); СтруктураРазбора = ШтрихкодированиеОбщегоНазначенияИС.НоваяСтруктураОбработкиШтрихкода(МаркаРазб, ВидыПродукции); Шк.Штрихкод = СтруктураРазбора.НормализованныйШтрихкод; Иначе Шк.Штрихкод = ПолучитьСтрокуИзДвоичныхДанных(Base64Значение(xmldoc.Штрихкоды.строка.ШтрихкодКодир)); КонецЕсли; КонецЕсли; ДокШк.Записать(); Возврат "true"; Исключение Возврат ОписаниеОшибки(); КонецПопытки КонецФункции Функция ЗаполнитьКодМаркировкиВПоставкеМП(КодМП, ном, КодМаркировки, СсыльМП, ШтрихкодПоставки = "") Если Не ЗначениеЗаполнено(СсыльМП) Тогда Возврат Ложь; КонецЕсли; МассивТипПродукцииМП = Новый Массив(); МассивТипПродукцииМП.Добавить(Справочники.ВидыПродукцииИС.НайтиПоНаименованию("Молочная продукция")); МассивТипПродукцииМП.Добавить(Справочники.ВидыПродукцииИС.НайтиПоНаименованию("Корма для животных (влажные)")); МассивТипПродукцииМП.Добавить(Справочники.ВидыПродукцииИС.НайтиПоНаименованию("Корма для животных (сухие)")); МассивТипПродукцииМП.Добавить(Справочники.ВидыПродукцииИС.НайтиПоНаименованию("Спортивное питание")); МассивТипПродукцииМП.Добавить(Справочники.ВидыПродукцииИС.НайтиПоНаименованию("Консервы")); МассивТипПродукцииМП.Добавить(Справочники.ВидыПродукцииИС.НайтиПоНаименованию("Напитки с содержанием молока, какао, прочие")); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ПоставкаМПЗаказы.Ссылка КАК Ссылка |ИЗ | Документ.ПоставкаМП.Заказы КАК ПоставкаМПЗаказы |ГДЕ | ПоставкаМПЗаказы.КарточкаМП = &КарточкаМП | И ПоставкаМПЗаказы.Ссылка = &Ссылка | И (ПоставкаМПЗаказы.КодМП = &КодМП | ИЛИ &ИскатьПоШтрихкоду | И ПоставкаМПЗаказы.ШтрихкодПоставки = &ШтрихкодПоставки)"; Запрос.УстановитьПараметр("Ссылка", СсыльМП); Запрос.УстановитьПараметр("КарточкаМП", ном); Запрос.УстановитьПараметр("КодМП", КодМП); Запрос.УстановитьПараметр("ШтрихкодПоставки", ШтрихкодПоставки); Запрос.УстановитьПараметр("ИскатьПоШтрихкоду", ЗначениеЗаполнено(ШтрихкодПоставки) И ШтрихкодПоставки <> "0"); РезультатЗапроса = Запрос.Выполнить().Выгрузить(); Если РезультатЗапроса.Количество() > 0 Тогда Док = СсыльМП.ПолучитьОбъект(); КодМрк = Док.КодыМаркировки.Добавить(); ДвоичныеДанные = Base64Значение(КодМаркировки); Если Не ЗначениеЗаполнено(ДвоичныеДанные) Тогда Марка = КодМаркировки; КодМрк.МаркаСтрока = КодМаркировки; Иначе Марка = ПолучитьСтрокуИзДвоичныхДанных(ДвоичныеДанные); СтруктураРазбора = ШтрихкодированиеОбщегоНазначенияИС.НоваяСтруктураОбработкиШтрихкода(Марка, МассивТипПродукцииМП); КодМрк.МаркаСтрока = СтруктураРазбора.НормализованныйШтрихкод; КонецЕсли; КодМрк.МаркаСтрока64 = КодМаркировки; // Сопоставление марки с кодом МП из строки поставки КодМПДляЗаписи = СокрЛП(Строка(КодМП)); Если Не ЗначениеЗаполнено(КодМПДляЗаписи) Или КодМПДляЗаписи = "Не определен" Или КодМПДляЗаписи = "00-00-00" Тогда Если ЗначениеЗаполнено(ШтрихкодПоставки) И ШтрихкодПоставки <> "0" Тогда СтрокиЗаказа = Док.Заказы.НайтиСтроки(Новый Структура("КарточкаМП, ШтрихкодПоставки", ном, ШтрихкодПоставки)); Иначе СтрокиЗаказа = Неопределено; КонецЕсли; Если СтрокиЗаказа = Неопределено Или СтрокиЗаказа.Количество() = 0 Тогда СтрокиЗаказа = Док.Заказы.НайтиСтроки(Новый Структура("КарточкаМП", ном)); КонецЕсли; Если СтрокиЗаказа <> Неопределено И СтрокиЗаказа.Количество() > 0 И ЗначениеЗаполнено(СтрокиЗаказа[0].КодМП) Тогда КодМПДляЗаписи = СтрокиЗаказа[0].КодМП; КонецЕсли; КонецЕсли; Если ЗначениеЗаполнено(КодМПДляЗаписи) Тогда КодМрк.КодМП = КодМПДляЗаписи; КонецЕсли; Док.Записать(); возврат истина; Иначе Возврат Ложь; КонецЕсли; КонецФункции Функция ПолучитьКодМаркировкиИзСтрокиXDTO(СтрокаXDTO) Попытка Если ТипЗнч(СтрокаXDTO.КодМаркировки) <> Тип("ОбъектXDTO") И ЗначениеЗаполнено(СтрокаXDTO.КодМаркировки) Тогда Возврат Строка(СтрокаXDTO.КодМаркировки); КонецЕсли; Исключение КонецПопытки; Возврат ""; КонецФункции Функция ПолучитьСсылкуПоставкиМПИзСтрокиXDTO(СтрокаXDTO) Попытка Если ТипЗнч(СтрокаXDTO.ПоставкаМП) = Тип("ОбъектXDTO") И ЗначениеЗаполнено(СтрокаXDTO.ПоставкаМП.Ссылка) И СтрокаXDTO.ПоставкаМП.Ссылка <> ПустойUUID() Тогда СсылкаПоставки = Документы.ПоставкаМП.ПолучитьСсылку( Новый УникальныйИдентификатор(СтрокаXDTO.ПоставкаМП.Ссылка)); Если ЗначениеЗаполнено(СсылкаПоставки) Тогда Возврат СсылкаПоставки; КонецЕсли; КонецЕсли; Исключение КонецПопытки; Возврат Документы.ПоставкаМП.ПустаяСсылка(); КонецФункции Функция НовыйЭлементОтветаТСД() Возврат Новый Структура("Property", Новый Массив); КонецФункции Процедура ДобавитьСвойствоОтветаТСД(Элемент, Значение) Свойство = Новый Структура("Value", XMLСтрока(Значение)); Элемент.Property.Добавить(Свойство); КонецПроцедуры Функция ПустойUUID() Возврат "00000000-0000-0000-0000-000000000000"; КонецФункции Функция UUIDСсылки(Ссылка) Если Не ЗначениеЗаполнено(Ссылка) Тогда Возврат ПустойUUID(); КонецЕсли; Возврат Строка(Ссылка.УникальныйИдентификатор()); КонецФункции Функция GetStockInCells() Экспорт МассивValue = Новый Массив; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Остатки.СтруктурнаяЕдиница КАК Склад, | Остатки.Ячейка КАК Ячейка, | Остатки.Номенклатура КАК Номенклатура, | Остатки.Партия КАК Партия, | Остатки.КоличествоОстаток КАК Количество |ИЗ | РегистрНакопления.ЗапасыНаСкладах.Остатки КАК Остатки |ГДЕ | Остатки.КоличествоОстаток > 0 | И Остатки.Ячейка <> ЗНАЧЕНИЕ(Справочник.Ячейки.ПустаяСсылка)"; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл МассивProperty = Новый Массив; МассивProperty.Добавить(Новый Структура("Value", Строка(Выборка.Склад.УникальныйИдентификатор()))); МассивProperty.Добавить(Новый Структура("Value", Строка(Выборка.Ячейка.УникальныйИдентификатор()))); МассивProperty.Добавить(Новый Структура("Value", Строка(Выборка.Номенклатура.УникальныйИдентификатор()))); МассивProperty.Добавить(Новый Структура("Value", ?(ЗначениеЗаполнено(Выборка.Партия), Строка(Выборка.Партия.УникальныйИдентификатор()), "00000000-0000-0000-0000-000000000000"))); МассивProperty.Добавить(Новый Структура("Value", Формат(Выборка.Количество, "ЧРД=.; ЧГ=0"))); МассивValue.Добавить(Новый Структура("Property", МассивProperty)); КонецЦикла; Возврат УпаковатьОтветТСДВстроку(МассивValue); // строка! КонецФункции Функция GetBatches() Экспорт МассивValue = Новый Массив; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Партии.Ссылка КАК Ссылка, | Партии.Наименование КАК Наименование, | Партии.Владелец КАК Владелец |ИЗ | Справочник.ПартииНоменклатуры КАК Партии |ГДЕ | НЕ Партии.ПометкаУдаления"; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл МассивProperty = Новый Массив; МассивProperty.Добавить(Новый Структура("Value", Строка(Выборка.Ссылка.УникальныйИдентификатор()))); МассивProperty.Добавить(Новый Структура("Value", Выборка.Наименование)); МассивProperty.Добавить(Новый Структура("Value", ?(ЗначениеЗаполнено(Выборка.Владелец), Строка(Выборка.Владелец.УникальныйИдентификатор()), "00000000-0000-0000-0000-000000000000"))); МассивValue.Добавить(Новый Структура("Property", МассивProperty)); КонецЦикла; Возврат УпаковатьОтветТСДВстроку(МассивValue); // строка! КонецФункции Функция GetCells() Экспорт МассивValue = Новый Массив; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Ячейки.Ссылка КАК Ссылка, | Ячейки.Наименование КАК Наименование, | Ячейки.Код КАК Код, | Ячейки.Владелец КАК Владелец, | Ячейки.Владелец.Наименование КАК НаименованиеСклада, | Ячейки.Код КАК Штрихкод |ИЗ | Справочник.Ячейки КАК Ячейки |ГДЕ | НЕ Ячейки.ПометкаУдаления"; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл МассивProperty = Новый Массив; // 0 — ссылка ячейки МассивProperty.Добавить(Новый Структура("Value", Строка(Выборка.Ссылка.УникальныйИдентификатор()))); // 1 — наименование ячейки МассивProperty.Добавить(Новый Структура("Value", Выборка.Наименование)); // 2 — код МассивProperty.Добавить(Новый Структура("Value", Выборка.Код)); // 3 — склад UUID МассивProperty.Добавить(Новый Структура("Value", ?(ЗначениеЗаполнено(Выборка.Владелец), Строка(Выборка.Владелец.УникальныйИдентификатор()), "00000000-0000-0000-0000-000000000000"))); // 4 — штрихкод ячейки МассивProperty.Добавить(Новый Структура("Value", Строка(Выборка.Штрихкод))); // 5 — наименование склада МассивProperty.Добавить(Новый Структура("Value", ?(ЗначениеЗаполнено(Выборка.НаименованиеСклада), Выборка.НаименованиеСклада, ""))); МассивValue.Добавить(Новый Структура("Property", МассивProperty)); КонецЦикла; Возврат УпаковатьОтветТСДВстроку(МассивValue); КонецФункции Функция GetOrganizations() МассивОбъектов = Новый Массив; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Организации.Ссылка КАК Ссылка, | Организации.Наименование КАК Наименование, | Организации.Код КАК Код |ИЗ | Справочник.Организации КАК Организации |ГДЕ | НЕ Организации.ПометкаУдаления"; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Элемент = НовыйЭлементОтветаТСД(); ДобавитьСвойствоОтветаТСД(Элемент, Строка(Выборка.Ссылка.УникальныйИдентификатор())); ДобавитьСвойствоОтветаТСД(Элемент, Выборка.Наименование); ДобавитьСвойствоОтветаТСД(Элемент, Выборка.Код); МассивОбъектов.Добавить(Элемент); КонецЦикла; Возврат УпаковатьОтветТСДВстроку(МассивОбъектов); КонецФункции