четверг, 1 сентября 2016 г.

Изменение дополнительного (пользовательского) регистра

//
//
//   выгружалась дата в отдельный стандартный реквизит "ДатаВключенияТовара"
//
//  Выгрузка производится в дополнительный пользовательский реквизит "Дата включения номенклатура"
//
Процедура ПроизводимПроверкуНоменклатурыНаОстаток() Экспорт

СвойствоДопРегистра = ПолучаемСвойствоДопРегистра();
ДопРеквизитДатаВключения = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(СвойствоДопРегистра);
Запрос1 = Новый Запрос;
Запрос1.УстановитьПараметр("ПометкаУдаления", Истина );
Запрос1.УстановитьПараметр("ЭтоГруппа", Истина);
Запрос1.Текст = "ВЫБРАТЬ
| Номенклатура.Ссылка,
| Номенклатура.Артикул,
| Номенклатура.ОстатокНулевой
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.ЭтоГруппа <> &ЭтоГруппа
| И Номенклатура.ПометкаУдаления <> &ПометкаУдаления";
РезультатЗапроса1 = Запрос1.Выполнить();
ВыборкаДетальныеЗаписи1 = РезультатЗапроса1.Выбрать();

Пока ВыборкаДетальныеЗаписи1.Следующий() Цикл

Запрос2 = Новый Запрос;
Запрос2.УстановитьПараметр("Ссылка", ВыборкаДетальныеЗаписи1.Ссылка);
Запрос2.Текст = "ВЫБРАТЬ
| СУММА(СвободныеОстаткиОстатки.ВНаличииОстаток - СвободныеОстаткиОстатки.ВРезервеСоСкладаОстаток) КАК ВНаличииОстаток
|ИЗ
| РегистрНакопления.СвободныеОстатки.Остатки КАК СвободныеОстаткиОстатки
|ГДЕ
| СвободныеОстаткиОстатки.Номенклатура.Ссылка = &Ссылка";
РезультатЗапроса2 = Запрос2.Выполнить();
ВыборкаДетальныеЗаписи2 = РезультатЗапроса2.Выбрать();

Пока ВыборкаДетальныеЗаписи2.Следующий() Цикл
Если ВыборкаДетальныеЗаписи2.ВНаличииОстаток = NULL ИЛИ ВыборкаДетальныеЗаписи2.ВНаличииОстаток = НеОпределено ИЛИ ВыборкаДетальныеЗаписи2.ВНаличииОстаток = 0 Тогда
Если  ВыборкаДетальныеЗаписи1.ОстатокНулевой <> Истина Тогда

// закоменттировано за ненадобностью 30062016
//СсылкаНаОбъект = ВыборкаДетальныеЗаписи1.Ссылка;
//ОбъектКарточкаНоменклатура = СсылкаНаОбъект.ПолучитьОбъект();
//ОбъектКарточкаНоменклатура.ОстатокНулевой = Истина;
//ОбъектКарточкаНоменклатура.ДатаПоследнейПроверки = ТекущаяДата();
//ОбъектКарточкаНоменклатура.ДатаВключенияТовара =  '00010101000000';
//ОбъектКарточкаНоменклатура.ОбменДанными.Загрузка = Истина;
//ОбъектКарточкаНоменклатура.Записать();

Ном = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул",ВыборкаДетальныеЗаписи1.Артикул);
 НомСтрокаДопРеквизита = ПолучитьСтрокуДопРеквизита(Ном,ДопРеквизитДатаВключения);
НомО = Ном.ПолучитьОбъект();
Если НомСтрокаДопРеквизита <> NULL Тогда
ТабДок = НомО.ДополнительныеРеквизиты;
ТабДок[НомСтрокаДопРеквизита-1].Свойство = ДопРеквизитДатаВключения;
ТабДок[НомСтрокаДопРеквизита-1].Значение = '00010101000001';
Иначе
НовыйРеквизит = НомО.ДополнительныеРеквизиты.Добавить(); //.Вставить() .Получить();
НовыйРеквизит.Свойство = ДопРеквизитДатаВключения;
НовыйРеквизит.Значение = '00010101000001';
КонецЕсли;
  НомО.ДатаВключенияТовара = '00010101000001';
НомО.ДатаПоследнейПроверки = ТекущаяДата();
  НомО.ОстатокНулевой = Истина;
НомО.ОбменДанными.Загрузка = Истина;
НомО.Записать()
КонецЕсли
Иначе
Если  ВыборкаДетальныеЗаписи1.ОстатокНулевой = Истина Тогда

// закоменттировано за ненадобностью 30062016
//СсылкаНаОбъект = ВыборкаДетальныеЗаписи1.Ссылка;
//ОбъектКарточкаНоменклатура = СсылкаНаОбъект.ПолучитьОбъект();
//ОбъектКарточкаНоменклатура.ОстатокНулевой = Ложь;
//ОбъектКарточкаНоменклатура.ДатаВключенияТовара = ТекущаяДата();
//ОбъектКарточкаНоменклатура.ОбменДанными.Загрузка = Истина;
//ОбъектКарточкаНоменклатура.Записать();

Ном = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул",ВыборкаДетальныеЗаписи1.Артикул);
 НомСтрокаДопРеквизита = ПолучитьСтрокуДопРеквизита(Ном,ДопРеквизитДатаВключения);
НомО = Ном.ПолучитьОбъект();
Если НомСтрокаДопРеквизита <> NULL Тогда
ТабДок = НомО.ДополнительныеРеквизиты;
ТабДок[НомСтрокаДопРеквизита-1].Свойство = ДопРеквизитДатаВключения;
ТабДок[НомСтрокаДопРеквизита-1].Значение = ТекущаяДата();
Иначе
НовыйРеквизит = НомО.ДополнительныеРеквизиты.Добавить(); //.Вставить() .Получить();
НовыйРеквизит.Свойство = ДопРеквизитДатаВключения;
НовыйРеквизит.Значение = ТекущаяДата();
КонецЕсли;
   НомО.ДатаВключенияТовара = ТекущаяДата();
 НомО.ОстатокНулевой = Ложь;
НомО.ОбменДанными.Загрузка = Истина;
НомО.Записать()



//другой вариант изменения доп регистра

//ДопРеквизитДатаВключения = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(СвойствоДопРегистра);
//Ном = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул",ВыборкаДетальныеЗаписи1.Артикул);  //.НайтиПоНаименованию("Прикормка Traper Magic 00009");
//НомО = Ном.ПолучитьОбъект();
//НовыйРеквизит = НомО.ДополнительныеРеквизиты.Добавить(); //.Вставить() .Получить();
//НовыйРеквизит.Свойство = ДопРеквизитДатаВключения;
//НовыйРеквизит.Значение = ТекущаяДата();
//Попытка
// НомО.Записать();
//Исключение
// //Сообщить("Не удалось занисать " + НомО.Наименование);
//КонецПопытки;


КонецЕсли
КонецЕсли
КонецЦикла
КонецЦикла

КонецПроцедуры  // ПроизводимПроверкуНоменклатурыНаОстаток()
//Получаем номер строки пользовательского доп регистра
Функция ПолучитьСтрокуДопРеквизита(Ссылка,Свойство)
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Свойство", Свойство);
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.Текст =  "ВЫБРАТЬ
               | МАКСИМУМ(НоменклатураДополнительныеРеквизиты.НомерСтроки) КАК НомерСтроки
               |ИЗ
               | Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
               |ГДЕ
               | НоменклатураДополнительныеРеквизиты.Ссылка = &Ссылка
               | И НоменклатураДополнительныеРеквизиты.Свойство = &Свойство";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

Если ВыборкаДетальныеЗаписи.Количество() <> 0 Тогда
ВыборкаДетальныеЗаписи.Следующий();
Возврат ВыборкаДетальныеЗаписи.НомерСтроки
Иначе
Возврат NULL
КонецЕсли
КонецФункции // ПолучитьСтрокуДопРеквизита()
Функция ПолучаемСвойствоДопРегистра()

//получаем данные "свойства" дополнительного реквизита
Запрос3 = Новый Запрос;
Запрос3.Текст = "ВЫБРАТЬ
| НаборыДополнительныхРеквизитовИСведенийДополнительныеРеквизиты.Свойство КАК Свойство
|ИЗ
| Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты КАК НаборыДополнительныхРеквизитовИСведенийДополнительныеРеквизиты
|ГДЕ
| НаборыДополнительныхРеквизитовИСведенийДополнительныеРеквизиты.Ссылка.Наименование = ""Основной вид""
| И НаборыДополнительныхРеквизитовИСведенийДополнительныеРеквизиты.НомерСтроки = 22";
РезультатЗапроса3 = Запрос3.Выполнить();
ВыборкаДетальныеЗаписи3 = РезультатЗапроса3.Выбрать();
ВыборкаДетальныеЗаписи3.Следующий();
Возврат ВыборкаДетальныеЗаписи3.Свойство
КонецФункции // ПолучаемСвойствоДопРегистра()
//  
Процедура ПроизводимДобавлениеДопРеквизитаДатаВключения() Экспорт

СвойствоДопРегистра = ПолучаемСвойствоДопРегистра();
ДопРеквизитДатаВключения = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(СвойствоДопРегистра);
Запрос1 = Новый Запрос;
Запрос1.УстановитьПараметр("ПометкаУдаления", Истина );
Запрос1.УстановитьПараметр("ЭтоГруппа", Истина);
Запрос1.Текст = "ВЫБРАТЬ
| Номенклатура.Артикул
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.ЭтоГруппа <> &ЭтоГруппа
| И Номенклатура.ПометкаУдаления <> &ПометкаУдаления";
РезультатЗапроса1 = Запрос1.Выполнить();
ВыборкаДетальныеЗаписи1 = РезультатЗапроса1.Выбрать();

Пока ВыборкаДетальныеЗаписи1.Следующий() Цикл
Ном = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул",ВыборкаДетальныеЗаписи1.Артикул);
НомСтрокаДопРеквизита = ПолучитьСтрокуДопРеквизита(Ном,ДопРеквизитДатаВключения);
   Если НомСтрокаДопРеквизита = NULL Тогда
    НомО = Ном.ПолучитьОбъект();
    НовыйРеквизит = НомО.ДополнительныеРеквизиты.Добавить(); //.Вставить() .Получить();
    НовыйРеквизит.Свойство = ДопРеквизитДатаВключения;
    НовыйРеквизит.Значение = '00010101000001';
    НомО.Записать()
Иначе
НомО = Ном.ПолучитьОбъект();
ТабДок = НомО.ДополнительныеРеквизиты;
ТабДок[НомСтрокаДопРеквизита-1].Свойство = ДопРеквизитДатаВключения;
ТабДок[НомСтрокаДопРеквизита-1].Значение =  '00010101000001';
НомО.Записать()
КонецЕсли;
КонецЦикла

КонецПроцедуры  // ПроизводимПроверкуНоменклатурыНаОстаток()

Комментариев нет:

Отправить комментарий