8.х Перенос основной спецификации из ПУб в Бух 8.1

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Ugrumi, 18 фев 2009.

  1. TopicStarter Overlay
    Ugrumi
    Offline

    Ugrumi Опытный в 1С

    Регистрация:
    8 окт 2007
    Сообщения:
    80
    Симпатии:
    0
    Баллы:
    26
    Не как не получается перенести основную спецификацию из ПУб в бухию 8.1, сама спецификация переносится и нормально, конечно ее тоже стандартным способом не выгрузишь, но это получилось победить с помощью произвольного алгоритма я перенес спецификацию, содержание модуля:

    Код:
    ТабОбщая = СоздатьОбъект("ТаблицаЗначений");
    ТабОбщая.НоваяКолонка("Номенклатура");
    
    ТабГрупп = СоздатьОбъект("ТаблицаЗначений");
    ТабГрупп.НоваяКолонка("Группы");
    ТабГрупп.НоваяКолонка("ОснСпец");
    
    
    Спецификация = СоздатьОбъект("ТаблицаЗначений");
    Спецификация.НоваяКолонка("Номенклатура");
    Спецификация.НоваяКолонка("Количество");
    
    Спр=СоздатьОбъект("Справочник.Номенклатура");
    Спр.НайтиПоКоду("16",0); 
    Группа=Спр.ТекущийЭлемент();
    Нормы = СоздатьОбъект("Справочник.НормыРасходов");
    Нормы2 = СоздатьОбъект("Справочник.НормыРасходов");
    
    ВходящиеДанные = СоздатьОбъект("СписокЗначений");
    
    Номен = СоздатьОбъект("Справочник.Номенклатура");
    Номен.ВыбратьЭлементы();
    Пока Номен.ПолучитьЭлемент() = 1 Цикл
    
    Если Номен.ПринадлежитГруппе(Группа)=1  Тогда
    Отказ = 1;
    Продолжить;
    КонецЕсли;
    Прошло = 0;
    ДопГруппа = 0;
    Нормы.ИспользоватьВладельца(Номен.ТекущийЭлемент());
    Нормы.ВыбратьЭлементы();
    Пока Нормы.ПолучитьЭлемент() = 1 Цикл
    
    Если Нормы.ЭтоГруппа() = 1 Тогда
    ТабГрупп.НоваяСтрока();
    ТабГрупп.Группы = Нормы.ТекущийЭлемент();
    Если Нормы.ТекущийЭлемент() = Номен.ТекущийЭлемент().ОсновнаяСпецификация Тогда
    ТабГрупп.ОснСпец = 1;
    Иначе
    ТабГрупп.ОснСпец = 0;
    КонецЕсли;
    ИначеЕсли Нормы.ТекущийЭлемент().Уровень() = 1 Тогда
    ТабОбщая.НоваяСтрока();
    ТабОбщая.Номенклатура = Нормы.ТекущийЭлемент();
    Прошло = 1;
    КонецЕсли;
    КонецЦикла;
    
    Если (ТабГрупп.КоличествоСтрок() = 0) И (Прошло = 1) Тогда
    ТабГрупп.НоваяСтрока();
    ТабГрупп.Группы = Номен.ТекущийЭлемент();
    ДопГруппа = 1;
    ТабГрупп.ОснСпец = 1;
    КонецЕсли;
    
    
    ТабГрупп.ВыбратьСтроки();
    Пока ТабГрупп.ПолучитьСтроку() = 1 Цикл
    ВходящиеДанные.УдалитьВсе();
    ВходящиеДанные.Установить("Наименование", ТабГрупп.Группы.Наименование);
    ВходящиеДанные.Установить("Владелец", Номен.ТекущийЭлемент());
    ВходящиеДанные.Установить("ОснСпец", ТабГрупп.ОснСпец);
    Нормы2.ИспользоватьВладельца(Номен.ТекущийЭлемент());
    Нормы2.ИспользоватьРодителя(ТабГрупп.Группы);
    Нормы2.ВыбратьЭлементы();
    Пока Нормы2.ПолучитьЭлемент() = 1 Цикл
    
    Спецификация.НоваяСтрока();
    Спецификация.Номенклатура = Нормы2.ТекущийЭлемент().Элемент;
    Спецификация.Количество   = ?(Нормы2.КолПрод.Получить(Параметры.ДатаКонцаПериодаВыгрузки) = 0, 0, Нормы2.Норма.Получить(Параметры.ДатаКонцаПериодаВыгрузки) / Нормы2.КолПрод.Получить(Параметры.ДатаКонцаПериодаВыгрузки));
    
    КонецЦикла;
    
    ТабОбщая.ВыбратьСтроки();
    Пока ТабОбщая.ПолучитьСтроку() = 1 Цикл
    Спецификация.НоваяСтрока();
    Спецификация.Номенклатура = ТабОбщая.Номенклатура.Элемент;
    Спецификация.Количество   = ?(ТабОбщая.Номенклатура.КолПрод.Получить(Параметры.ДатаКонцаПериодаВыгрузки) = 0, 0, ТабОбщая.Номенклатура.Норма.Получить(Параметры.ДатаКонцаПериодаВыгрузки) / ТабОбщая.Номенклатура.КолПрод.Получить(Параметры.ДатаКонцаПериодаВыгрузки));
    КонецЦикла;
    
    Если Спецификация.КоличествоСтрок() = 0 Тогда
    Отказ = 1;
    Иначе
    ВходящиеДанные.Установить("ИсходныеКомплектующие", Спецификация); 
    ВыгрузитьПоПравилу(,, ВходящиеДанные,, "СпецификацииНоменклатурыПроизв");
    КонецЕсли;
    Спецификация.УдалитьСтроки();
    
    КонецЦикла;  
    ТабГрупп.УдалитьСтроки();
    ТабОбщая.УдалитьСтроки();
    
    КонецЦикла;
    
    
    
    Далее что я делаю. Т.к получившаяся спецификацию я не могу передать одним объектом в прав. конвертации "номенклатуры". передаю получившуюся таблицу

    Код:
    
    ИсходящиеДанные = СоздатьОбъект("СписокЗначений");
    
    Параметры.ПарамОснСпец = ВходящиеДанные.Получить("ОснСпец");
    
    
    Если Параметры.ПарамОснСпец = 1 Тогда
    ИсходящиеДанные.Установить("Владелец", ВходящиеДанные.Получить("Владелец"));
    ИсходящиеДанные.Установить("ИсходныеКомплектующие", ВходящиеДанные.Получить("ИсходныеКомплектующие"));
    ИначеЕсли Параметры.ПарамОснСпец = 0  Тогда
    ИсходящиеДанные.Установить("Владелец", ВходящиеДанные.Получить("Владелец"));
    ИсходящиеДанные.Установить("Наименование", ВходящиеДанные.Получить("Наименование"));
    КонецЕсли;
    
    
    
    
    Правило конв. "СпецификацииНоменклатурыПроизв" вызывается из прав. конв. "номенклатуры" где есть реквизит основная спецификация номенклатуры. Чтобы замкнулась цепочка мне необходимо, проверить основная ли это спец., если не основная то найти ее:
    Код:
    ИсходящиеДанные = СоздатьОбъект("СписокЗначений");
    
    Если Параметры.ПарамОснСпец = 0 Тогда
    
    Номен = ВходящиеДанные.Получить("Владелец");
    ТабОбщая = СоздатьОбъект("ТаблицаЗначений");
    ТабОбщая.НоваяКолонка("Номенклатура");
    
    ТабГрупп = СоздатьОбъект("ТаблицаЗначений");
    ТабГрупп.НоваяКолонка("Группы");
    ТабГрупп.НоваяКолонка("ОснСпец");
    
    
    Спецификация = СоздатьОбъект("ТаблицаЗначений");
    Спецификация.НоваяКолонка("Номенклатура");
    Спецификация.НоваяКолонка("Количество");
    
    Спр=СоздатьОбъект("Справочник.Номенклатура");
    Спр.НайтиПоКоду("16",0); 
    Группа=Спр.ТекущийЭлемент();
    Нормы = СоздатьОбъект("Справочник.НормыРасходов");
    Нормы2 = СоздатьОбъект("Справочник.НормыРасходов");
    
    ВходящиеДанные = СоздатьОбъект("СписокЗначений");
    
    Прошло = 0;
    ДопГруппа = 0;
    Нормы.ИспользоватьВладельца(Номен);
    Нормы.ВыбратьЭлементы();
    Пока Нормы.ПолучитьЭлемент() = 1 Цикл
    
    Если Нормы.ЭтоГруппа() = 1 Тогда
    ТабГрупп.НоваяСтрока();
    ТабГрупп.Группы = Нормы.ТекущийЭлемент();
    Если Нормы.ТекущийЭлемент() = Номен.ОсновнаяСпецификация Тогда
    ТабГрупп.ОснСпец = 1;
    Иначе
    ТабГрупп.ОснСпец = 0;
    КонецЕсли;
    ИначеЕсли Нормы.ТекущийЭлемент().Уровень() = 1 Тогда
    ТабОбщая.НоваяСтрока();
    ТабОбщая.Номенклатура = Нормы.ТекущийЭлемент();
    Прошло = 1;
    КонецЕсли;
    КонецЦикла;
    
    Если (ТабГрупп.КоличествоСтрок() = 0) И (Прошло = 1) Тогда
    ТабГрупп.НоваяСтрока();
    ТабГрупп.Группы = Номен;
    ДопГруппа = 1;
    ТабГрупп.ОснСпец = 1;
    КонецЕсли;
    
    
    ТабГрупп.ВыбратьСтроки();
    Пока ТабГрупп.ПолучитьСтроку() = 1 Цикл
    Если ТабГрупп.ОснСпец = 1 Тогда
    ВходящиеДанные.УдалитьВсе();
    ВходящиеДанные.Установить("Наименование", ТабГрупп.Группы.Наименование);
    ВходящиеДанные.Установить("Владелец", Номен);
    ВходящиеДанные.Установить("ОснСпец", ТабГрупп.ОснСпец);
    Нормы2.ИспользоватьВладельца(Номен);
    Нормы2.ИспользоватьРодителя(ТабГрупп.Группы);
    Нормы2.ВыбратьЭлементы();
    Пока Нормы2.ПолучитьЭлемент() = 1 Цикл
    
    Спецификация.НоваяСтрока();
    Спецификация.Номенклатура = Нормы2.ТекущийЭлемент().Элемент;
    Спецификация.Количество   = ?(Нормы2.КолПрод.Получить(Параметры.ДатаКонцаПериодаВыгрузки) = 0, 0, Нормы2.Норма.Получить(Параметры.ДатаКонцаПериодаВыгрузки) / Нормы2.КолПрод.Получить(Параметры.ДатаКонцаПериодаВыгрузки));
    
    КонецЦикла;
    
    ТабОбщая.ВыбратьСтроки();
    Пока ТабОбщая.ПолучитьСтроку() = 1 Цикл
    Спецификация.НоваяСтрока();
    Спецификация.Номенклатура = ТабОбщая.Номенклатура.Элемент;
    Спецификация.Количество   = ?(ТабОбщая.Номенклатура.КолПрод.Получить(Параметры.ДатаКонцаПериодаВыгрузки) = 0, 0, ТабОбщая.Номенклатура.Норма.Получить(Параметры.ДатаКонцаПериодаВыгрузки) / ТабОбщая.Номенклатура.КолПрод.Получить(Параметры.ДатаКонцаПериодаВыгрузки));
    КонецЦикла;
    
    Если Спецификация.КоличествоСтрок() = 0 Тогда
    Отказ = 1;
    Иначе
    ВходящиеДанные.Установить("ИсходныеКомплектующие", Спецификация);
    //ИсходящиеДанные.Установить("Владелец", Номен);
    //ИсходящиеДанные.Установить("ИсходныеКомплектующие", Спецификация);
    //ИсходящиеДанные.Установить("Наименование", ТабГрупп.Группы.Наименование);
    //ИсходящиеДанные.Установить("ОснСпец", 2);
    
    
    КонецЕсли;
    
    Параметры.ПарамОснСпец = 2;
    ВыгрузитьПоПравилу(,Значение,ВходящиеДанные,, "СпецификацииНоменклатурыПроизв");
    //Значение = Источник;
    КонецЕсли;
    КонецЦикла;  
    ИначеЕсли Параметры.ПарамОснСпец = 1 Тогда
    
    //ИсходящиеДанные.Установить("Владелец", ВходящиеДанные.Получить("Владелец"));
    //ИсходящиеДанные.Установить("ИсходныеКомплектующие", ВходящиеДанные.Получить("ИсходныеКомплектующие"));
    //ИсходящиеДанные.Установить("Наименование", ВходящиеДанные.Получить("Наименование"));
    
    ВыгрузитьПоПравилу(,Значение, ВходящиеДанные,, "СпецификацииНоменклатурыПроизв");
    //Значение = Источник;
    Параметры.ПарамОснСпец = 2;
    //Значение = Источник;
    
    КонецЕсли;
    
    
    
    
    В общем у кого хватит смелости просмотреть код, и сказать где у меня тут ошибка?
Похожие темы
  1. Михаил
    Ответов:
    6
    Просмотров:
    3.012
  2. mari8998
    Ответов:
    2
    Просмотров:
    786
  3. djekting
    Ответов:
    6
    Просмотров:
    1.745
Загрузка...

Поделиться этой страницей