ExtTsdUNFGalerey/WebServices/tsdsync/Ext/Module.bsl

1258 lines
79 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Функция 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()
МассивОбъектов = Новый Массив;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Организации.Ссылка КАК Ссылка,
| Организации.Наименование КАК Наименование,
| Организации.Код КАК Код
|ИЗ
| Справочник.Организации КАК Организации
|ГДЕ
| НЕ Организации.ПометкаУдаления";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Элемент = НовыйЭлементОтветаТСД();
ДобавитьСвойствоОтветаТСД(Элемент, Строка(Выборка.Ссылка.УникальныйИдентификатор()));
ДобавитьСвойствоОтветаТСД(Элемент, Выборка.Наименование);
ДобавитьСвойствоОтветаТСД(Элемент, Выборка.Код);
МассивОбъектов.Добавить(Элемент);
КонецЦикла;
Возврат УпаковатьОтветТСДВстроку(МассивОбъектов);
КонецФункции