Имя: Пароль:
1C
1С v8
Метод объекта не обнаружен
,
0 discant
 
22.06.12
10:34
Здравствуйте!
Из внешней обработки пытаюсь вызвать экспортную процедуру объекта заказ на производство
Документы.ЗаказНаПроизводство.ЗаполнитьМатериалыПоСпецификации(НовыйДокумент.Материалы, "Материалы").ПолучитьОбъект();
Пишет Метод объекта не обнаружен (ЗаполнитьМатериалыПоСпецификации()
Что не так?
1 Darky
 
22.06.12
10:36
Сразу нужно получить объект, а потом использовать его экспортные функции
2 Begin
 
22.06.12
10:36
"Документы.ЗаказНаПроизводство.ЗаполнитьМатериалыПоСпецификации(НовыйДокумент.Материалы, "Материалы")" Это метод из модуля менеджера.
3 zak555
 
22.06.12
10:37
объектого программирования сейчас нет ?
4 skiller3000
 
22.06.12
10:38
тебе ж русским языком написано... в модуле объекта нету процедуры ЗаполнитьМатериалыПоСпецификации или же не стоит свойство Экспорт после определения этой процедуры...
5 discant
 
22.06.12
10:40
(2) Эта процедура есть в модуле объекта документа ЗаказНаПроизводство.
(1) Приведите, плиз, пример кода?
6 Serg_1960
 
22.06.12
10:41
Блин, это бессмысленный поток сознания :(
7 skiller3000
 
22.06.12
10:41
(4) извиняюсь, не заметил что автор прямо из менеджера документов вызывает методы документов, надо сначала получитьобъект из ссылки... тебе выше уже написали....

ДокументОбъект = ДокументСсылка.ПолучитьОбъект();
ДокументОбъект.ЗаполнитьМатериалыПоСпецификации(НовыйДокумент.Материалы, "Материалы")
8 discant
 
22.06.12
10:42
(4) Модификатор Хкспорт у нее тоже есть
9 eromanov
 
22.06.12
10:42
Заполнить потом получить это сильно)))
10 ale-sarin
 
22.06.12
10:42
НовыйДокумент.ЗаполнитьМатериалыПоСпецификации(НовыйДокумент.Материалы, "Материалы")
11 mikecool
 
22.06.12
10:47
(5) тогда не пытайся ее вызывать из модуля менеджера
12 Serg_1960
 
22.06.12
10:49
Объясните автору, если сможете, что окончание строки "...ПолучитьОбъект()" меня просто убило. Я сам не в состоянии - подавился попкорном :))
13 discant
 
22.06.12
10:55
Приятного аппетита=) И... Не стоит быть таким впечатлительным...
14 mikecool
 
22.06.12
10:57
(12) да пофик, все равно до получения объекта не доходит )
(13) тебе в (10) уже ответили
15 Serg_1960
 
22.06.12
11:01
(14) Нет, ещё не ответили. Автор к ХХХ посту уточнит что "НовыйДокумент" - это ссылка :)
16 mikecool
 
22.06.12
11:02
(15) а это уже тема новой ветки )
17 discant
 
22.06.12
11:06
Пасибо большое... Завелось вот только не так как хотелось бы... В общем,
Для Каждого СтрокаТабличнойЧасти Из ПроизвЗаказ.Материалы Цикл
Номенклатура = СтрокаТабличнойЧасти.Номенклатура;
НовыйДокумент = Документы.ЗаказНаПроизводство.СоздатьДокумент();    
           ЗаполнениеДокументов.ЗаполнитьШапкуДокументаПоОснованию(НовыйДокумент, ПроизвЗаказ);
НовыйДокумент.ОсновнойЗаказНаПроизводство = ПроизвЗаказ;
           НовыйДокумент.Подразделение = РегистрыСведений.ЗначенияСвойствОбъектов.Получить(Новый Структура("Объект,Свойство",Номенклатура,ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Цех"))).Значение;
           НовыйДокумент.Дата = ТекущаяДата();
           НовыйДокумент.ДатаЗапуска = ПроизвЗаказ.ДатаЗапуска;
           НовыйДокумент.ДатаИсполнения = ПроизвЗаказ.ДатаЗапуска -1;
           НовыйДокумент.УстановитьНовыйНомер(ПроизвЗаказ.Организация.Префикс);
           НовыйДокумент.Ответственный =  глЗначениеПеременной("глТекущийПользователь");
           


               
                   // Заполняем таб. часть Продукция
                   НоваяСтрока = НовыйДокумент.Продукция.Добавить();
                                   ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТабличнойЧасти);
           
           
           //Заполняем Табл. часть Материалы:                                                      
НовыйДокумент.ЗаполнитьМатериалыПоСпецификации(НовыйДокумент.Материалы, "Материалы");


                   НовыйДокумент.Записать();
           Сообщить("Документ "+СокрЛП(НовыйДокумент));
               
           
       КонецЦикла;
Соответственно, в цикле создаю документы для каждой строки ТЧ Материалы из основного документа и ТЧ Продукция каждого созданного документа заполняю строкой ТЧ Материалы (по циклу).
Теперь надо сделать так, чтобы ТЧ Материалы каждого документа заполнялась Спецификацией его же ТЧ продукция. Как это лучше сделать?
18 Serg_1960
 
22.06.12
11:14
В начале алгоритма исправь ошибку:

Для Каждого СтрокаТабличнойЧасти Из ПроизвЗаказ.Материалы Цикл
   Номенклатура = СтрокаТабличнойЧасти.Номенклатура;
   Номенклатура = Справочники.Номенклатура.НайтиПоКоду("1234").ПолучитьОбъект();
   Если Номенклатура.ВидВоспроизводства <> Перечисления.ВидыВоспроизводстваНоменклатуры.Производство Тогда
       Продолжить;
   КонецЕсли;
   ...
19 discant
 
22.06.12
11:18
Что писать вместо "1234"?
20 Serg_1960
 
22.06.12
11:25
Ничего. Эту строку убрать - отладочная. Для удобства обращения "через точку" к документу-объекту.
21 Serg_1960
 
22.06.12
11:30
Далее: в УПП это всё делается гораздо проще. Вот типовой алгоритм (почти):
...
ЗаполнениеДокументов.ЗаполнитьШапкуДокументаПоОснованию(НовыйДокумент, ПроизвЗаказ);
НовыйДокумент.ОсновнойЗаказНаПроизводство = ПроизвЗаказ;
НовыйДокумент.ЗаполнитьПродукциюПоЗаказуНаПроизводство(ПроизвЗаказ);
НовыйДокумент.ЗаполнитьМатериалыПоСпецификации(НовыйДокумент.Материалы, "Материалы");
...
22 discant
 
22.06.12
11:31
Хорошо. А что с заполнением делать?
(17)
23 discant
 
22.06.12
11:32
прочитал...
24 Serg_1960
 
22.06.12
11:45
С каким "заполнением"? ЗаполнитьМатериалыПоСпецификации() использует спецификацию "по умолчанию" с помощью вызова УправлениеПроизводством.ОпределитьСпецификациюПоУмолчанию()
25 discant
 
22.06.12
11:47
(21) Такое не подходит... Дело в том, что нужно для ккждой подсборки создавать отдеьлный заказ...
26 discant
 
22.06.12
11:49
Материалы нужно заполнять в соответствии с деревом спецификаций Элемента Продукция.
27 Serg_1960
 
22.06.12
11:57
(25) Тогда возьми "за основу" типовой алгоритм ЗаполнитьПродукциюПоЗаказуНаПроизводство() и творчески его переосмысли :)

(26) В типовой конфе используется регистр сведений "ОсновныеСпецификацииНоменклатуры" на дату документа... Но тебе никто не запрещает, после типового заполнения, заменить спецификацию значением из документа-основания. Тогда ЗаполнитьМатериалыПоСпецификации() будет использовать "твою" спецификацию.

Но это методологически неверно :(
28 discant
 
22.06.12
12:00
Приведу фрагмент тз... Может, я яего неверно понимаю...
- Обработка должна на основании выбранного основного заказа формировать серию подчиненных заказов (в соответствии с деревом спецификации) по типовому механизму ввода на основании, пока в самом последнем заказе каждой «ветки» на закладке «материалы» не останутся только номенклатурные позиции с видом воспроизводства «закупка».
- Отличие от типового механизма в том, что на каждую подсборку   необходимо формировать отдельный заказ.
29 discant
 
22.06.12
12:20
(27) И что с этим делать?
30 discant
 
22.06.12
13:00
Так правильно я все же понимаю ТЗ?
31 Serg_1960
 
22.06.12
13:12
Сорри, обед был. Понимаешь ТЗ правильно. А алгоритм хромает. Продукция может состоять из одинаковых полуфабрикатов - зачем же на каждый из них создавать новый документ? Или сначало построить дерево раздеталировки или запоминать созданные документы и добавлять в них очередные полуфабрикаты из спецификаций (на которые уже создал документы)... как-то так.
32 Serg_1960
 
22.06.12
13:15
Тут, имхо, использование рекурсии уместно.
33 discant
 
22.06.12
13:23
(31) А как создать дерево раздеталировк? Я не понимаю: Ведь в заказе есть продукция (Это цельная сборка) и Материалы (это полуфабрикаты, из которых сборка получается) так?
В общем, уважаемый    Serg_1960, не могли бы вы помочь мне разобраться в этом более детально?
34 discant
 
22.06.12
13:38
Нашел еще такую обработку. Она использует Элементы типового заполнения... В общем, код - ниже...

Процедура КнопкаВыполнитьНажатие(Кнопка)
   Если НЕ ЗначениеЗаполнено(ПроизвЗаказ) Тогда
       Предупреждение("Выберите главный документ <<Заказы на производство>>!");
       Возврат;
   КонецЕсли;
   Если ПроизвЗаказ.Материалы.Количество() = 0 Тогда
       Предупреждение("Заполните табличную часть "+"""Материалы""");
       Возврат;
   КонецЕсли;    
   Для каждого Объект Из РегистрыНакопления Цикл

           Объект.УстановитьИспользованиеИтогов(Истина);

   КонецЦикла;    
   
   
   ДопПараметры = Новый Структура;    
   
   МассивПолуфабрикаты = Новый Массив;
   МассивПолуфабрикаты.Добавить(Перечисления.ВидыВоспроизводстваНоменклатуры.Производство);
   
   ДопПараметры.Вставить("ВидВоспроизводства",      МассивПолуфабрикаты);
   ДопПараметры.Вставить("ИмяРеквЗаказТабЧасть",    "Заказ");
   ДопПараметры.Вставить("ВернутьРезультатЗапроса", Истина);
   
   РезЗапроса = Неопределено;
   ЗаказыНаПроизводствоИПереработку.ЗаполнитьТабличнуюЧастьПоПотребностямЗаказаНаПроизводство(РезЗапроса, ПроизвЗаказ, ДопПараметры);
   
   // Создаем список значений подразделений.
   СписокПодр = Новый СписокЗначений;
   Обход = РезЗапроса.Выбрать();
   Пока Обход.СледующийПоЗначениюПоля("Подразделение") Цикл
       Если СписокПодр.НайтиПоЗначению(Обход.Подразделение) = неопределено Тогда
           СписокПодр.Добавить(Обход.Подразделение);
       КонецЕсли;
   КонецЦикла;
   
   Если СписокПодр.Количество() > 0 Тогда
       Для Каждого тт Из СписокПодр Цикл
           ЗП = Документы.ЗаказНаПроизводство.СоздатьДокумент();    
           ЗаполнениеДокументов.ЗаполнитьШапкуДокументаПоОснованию(ЗП, ПроизвЗаказ);
           ЗП.ОсновнойЗаказНаПроизводство = ПроизвЗаказ;
           ЗП.Подразделение = тт.Значение;
           ЗП.Дата = ТекущаяДата();
           ЗП.ДатаЗапуска = ПроизвЗаказ.ДатаЗапуска;
           ЗП.ДатаИсполнения = ПроизвЗаказ.ДатаИсполнения;
           ЗП.УстановитьНовыйНомер(ПроизвЗаказ.Организация.Префикс);
           ЗП.Ответственный =  глЗначениеПеременной("глТекущийПользователь");
           //вычисляем номер для ДереваЗаказов
           //Вытаскиваем № - Цифры.
           Если НЕ ЗначениеЗаполнено(ЗП.ДеревоЗаказов) Тогда
               цц = "0123456789";
               ном = "";
               длинаНомера = СтрДлина(ЗП.Номер);
               ии = длинаНомера;
               Пока ии > 0 Цикл
                   Если Найти(цц,Сред(ЗП.Номер,ии,1)) > 0 Тогда
                       ном = Сред(ЗП.Номер,ии,1) + ном;
                   Иначе
                       Прервать;
                   КонецЕсли;    
                   ии = ии - 1;
               КонецЦикла;    
               ном = СокрЛП(ПроизвЗаказ.ДеревоЗаказов)+"_"+Строка(Формат(Число(ном),"ЧГ=0"));
               ЗП.ДеревоЗаказов = ном;
           КонецЕсли;
           
           Обход = РезЗапроса.Выбрать();
           Пока Обход.Следующий() Цикл
               Если тт.Значение = Неопределено ИЛИ тт.Значение = Обход.Подразделение Тогда
                   // Заполняем таб. часть Продукция
                   НоваяСтрока = ЗП.Продукция.Добавить();
                   ЗаполнитьЗначенияСвойств(НоваяСтрока, Обход);
                   НоваяСтрока.Количество = Обход.Количество * Обход.КоэффициентХраненияОстатков / Обход.Коэффициент;
                   НоваяСтрока.Спецификация = УправлениеПроизводством.ОпределитьСпецификациюПоУмолчанию(НоваяСтрока.Номенклатура, НоваяСтрока.ХарактеристикаНоменклатуры, ЗП.Дата, ЗП.Подразделение);
               КонецЕсли;
           КонецЦикла;
           //Заполняем Табл. часть Материалы:
           
           
           ТаблицаИсходныеКомплектующие = ЗП.Материалы.Выгрузить();
           
           Параметры = Новый Структура("ПараметрыВыпуска, КоличествоУровнейРазузлования, ДатаСпецификации");
           
           Для Каждого СтрокаТабличнойЧасти Из ЗП.Продукция Цикл
               Если НЕ ЗначениеЗаполнено(СтрокаТабличнойЧасти.Спецификация) Тогда
                   Продолжить;
               КонецЕсли;
               
               РезультатРазузлования = Новый Структура("ИсходныеКомплектующие");
               
               СтруктураИсточник = Новый Структура("Номенклатура, ХарактеристикаНоменклатуры, ЕдиницаИзмерения, Коэффициент, Количество, Спецификация");
               ЗаполнитьЗначенияСвойств(СтруктураИсточник, СтрокаТабличнойЧасти);
               
               ПараметрыВыпуска = Новый Соответствие;
               Для Каждого ПараметрВыпуска из ЗП.ПараметрыВыпускаПродукции Цикл
                   
                   Если ПараметрВыпуска.КлючСвязи = СтрокаТабличнойЧасти.КлючСвязи Тогда
                       ПараметрыВыпуска.Вставить(ПараметрВыпуска.ВидПараметра.Наименование, ПараметрВыпуска.Значение);
                   КонецЕсли;
                   
               КонецЦикла;
               
               Параметры.ПараметрыВыпуска = ПараметрыВыпуска;
               Параметры.КоличествоУровнейРазузлования = 1;
               Параметры.ДатаСпецификации = ЗП.Дата;
               
               МассивОшибок = РазузлованиеНоменклатуры.РазузловатьНоменклатуру(СтруктураИсточник, РезультатРазузлования, Параметры);
               
               Если МассивОшибок.Количество() > 0 Тогда
                   
                   Для каждого Ошибка из МассивОшибок Цикл
                       
                       ОбщегоНазначения.Сообщение("Ошибка: " + Ошибка.Причина, Ошибка.СтатусОшибки);
                       ОбщегоНазначения.Сообщение(" Спецификация: " + Ошибка.Спецификация);
                       ОбщегоНазначения.Сообщение(" Номер строки: " + Ошибка.НомерСтроки);
                       ОбщегоНазначения.Сообщение(" Описание ошибки: " + Ошибка.ОписаниеОшибки);
                       
                   КонецЦикла;
                   
               КонецЕсли;
               
               Если РезультатРазузлования.ИсходныеКомплектующие = Неопределено Тогда
                   Продолжить;
               КонецЕсли;
               
               ИсходныеКомплектующие = РезультатРазузлования.ИсходныеКомплектующие;
               
               ИсходныеКомплектующие.ЗаполнитьЗначения(тт.Значение, "Подразделение");
               //заполним подразделение по основной спецификации полуфабрикатов
               Для каждого Строка из ИсходныеКомплектующие цикл
                   ПодразделениеНоменклатуры = ЗаказыНаПроизводствоИПереработку.ПолучитьПодразделениеИзСпецификации(Строка.Спецификация,Строка.Номенклатура,Строка.ХарактеристикаНоменклатуры);
                   Если ЗначениеЗаполнено(ПодразделениеНоменклатуры) Тогда
                       Строка.Подразделение = ПодразделениеНоменклатуры;
                   КонецЕсли;
               КонецЦикла;
               
               ИсходныеКомплектующие.Колонки.Добавить("Продукция");
               ИсходныеКомплектующие.Колонки.Добавить("ХарактеристикаПродукции");
               
               ИсходныеКомплектующие.ЗаполнитьЗначения(СтрокаТабличнойЧасти.Номенклатура, "Продукция");
               ИсходныеКомплектующие.ЗаполнитьЗначения(СтрокаТабличнойЧасти.ХарактеристикаНоменклатуры, "ХарактеристикаПродукции");
               ИсходныеКомплектующие.ЗаполнитьЗначения(СтрокаТабличнойЧасти.Спецификация, "Спецификация");
               
               ОбщегоНазначения.ЗагрузитьВТаблицуЗначений(ИсходныеКомплектующие, ТаблицаИсходныеКомплектующие);
               
           КонецЦикла;
           
           ТаблицаИсходныеКомплектующие.Свернуть("Номенклатура, ХарактеристикаНоменклатуры, ЕдиницаИзмерения, Коэффициент, ВидВоспроизводства, Спецификация, Подразделение, Продукция, ХарактеристикаПродукции", "Количество");
           
           ЗП.Материалы.Загрузить(ТаблицаИсходныеКомплектующие);
           
           Для Каждого СтрокаТабличнойЧасти Из ЗП.Материалы Цикл
               
               ОбработкаТабличныхЧастей.ЗаполнитьЕдиницуМестТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект, Ложь);        
               
           КонецЦикла;
           ЗП.Записать();
           Сообщить("Документ "+СокрЛП(ЗП));
           // Вызываем процедуру для записанного документа, чтобы на основании него нарисовать след. уровень
           СоздатьВнутреннийУровень(ЗП.Ссылка);
       КонецЦикла;
       Предупреждение("Документы созданы. Пожалуйста проверьте их и проведите!");
   КонецЕсли;
КонецПроцедуры
//*************************************************************************
Процедура СоздатьВнутреннийУровень(ВерхЗаказ)
   ДопПараметры = Новый Структура;    
   
   МассивПолуфабрикаты = Новый Массив;
   МассивПолуфабрикаты.Добавить(Перечисления.ВидыВоспроизводстваНоменклатуры.Производство);
   
   ДопПараметры.Вставить("ВидВоспроизводства",      МассивПолуфабрикаты);
   ДопПараметры.Вставить("ИмяРеквЗаказТабЧасть",    "Заказ");
   ДопПараметры.Вставить("ВернутьРезультатЗапроса", Истина);
   
   РезЗапроса = Неопределено;
   ЗаказыНаПроизводствоИПереработку.ЗаполнитьТабличнуюЧастьПоПотребностямЗаказаНаПроизводство(РезЗапроса, ВерхЗаказ, ДопПараметры);
   
   // Создаем список значений подразделений.
   СписокПодр = Новый СписокЗначений;
   Обход = РезЗапроса.Выбрать();
   Пока Обход.СледующийПоЗначениюПоля("Подразделение") Цикл
       Если СписокПодр.НайтиПоЗначению(Обход.Подразделение) = неопределено Тогда
           СписокПодр.Добавить(Обход.Подразделение);
       КонецЕсли;
   КонецЦикла;
   
   Если СписокПодр.Количество() > 0 Тогда
       Для Каждого тт Из СписокПодр Цикл
           ЗП = Документы.ЗаказНаПроизводство.СоздатьДокумент();    
           ЗаполнениеДокументов.ЗаполнитьШапкуДокументаПоОснованию(ЗП, ВерхЗаказ);
           ЗП.ОсновнойЗаказНаПроизводство = ВерхЗаказ;
           ЗП.Подразделение = тт.Значение;
           ЗП.Дата = Текущаядата();
           ЗП.ДатаЗапуска = ВерхЗаказ.ДатаЗапуска;
           ЗП.ДатаИсполнения = ВерхЗаказ.ДатаИсполнения;
           ЗП.УстановитьНовыйНомер(ВерхЗаказ.Организация.Префикс);
           ЗП.Ответственный =  глЗначениеПеременной("глТекущийПользователь");
           //вычисляем номер для ДереваЗаказов
           //Вытаскиваем № - Цифры.
           Если НЕ ЗначениеЗаполнено(ЗП.ДеревоЗаказов) Тогда
               цц = "0123456789";
               ном = "";
               длинаНомера = СтрДлина(ЗП.Номер);
               ии = длинаНомера;
               Пока ии > 0 Цикл
                   Если Найти(цц,Сред(ЗП.Номер,ии,1)) > 0 Тогда
                       ном = Сред(ЗП.Номер,ии,1) + ном;
                   Иначе
                       Прервать;
                   КонецЕсли;    
                   ии = ии - 1;
               КонецЦикла;    
               ном = СокрЛП(ВерхЗаказ.ДеревоЗаказов)+"_"+Строка(Формат(Число(ном),"ЧГ=0"));
               ЗП.ДеревоЗаказов = ном;
           КонецЕсли;
           
           Обход = РезЗапроса.Выбрать();
           Пока Обход.Следующий() Цикл
               Если тт.Значение = Неопределено ИЛИ тт.Значение = Обход.Подразделение Тогда
                   // Заполняем таб. часть Продукция
                   НоваяСтрока = ЗП.Продукция.Добавить();
                   ЗаполнитьЗначенияСвойств(НоваяСтрока, Обход);
                   НоваяСтрока.Количество = Обход.Количество * Обход.КоэффициентХраненияОстатков / Обход.Коэффициент;
                   НоваяСтрока.Спецификация = УправлениеПроизводством.ОпределитьСпецификациюПоУмолчанию(НоваяСтрока.Номенклатура, НоваяСтрока.ХарактеристикаНоменклатуры, ЗП.Дата, ЗП.Подразделение);
               КонецЕсли;
           КонецЦикла;
           //Заполняем Табл. часть Материалы:
           
           
           ТаблицаИсходныеКомплектующие = ЗП.Материалы.Выгрузить();
           
           Параметры = Новый Структура("ПараметрыВыпуска, КоличествоУровнейРазузлования, ДатаСпецификации");
           
           Для Каждого СтрокаТабличнойЧасти Из ЗП.Продукция Цикл
               Если НЕ ЗначениеЗаполнено(СтрокаТабличнойЧасти.Спецификация) Тогда
                   Продолжить;
               КонецЕсли;
               
               РезультатРазузлования = Новый Структура("ИсходныеКомплектующие");
               
               СтруктураИсточник = Новый Структура("Номенклатура, ХарактеристикаНоменклатуры, ЕдиницаИзмерения, Коэффициент, Количество, Спецификация");
               ЗаполнитьЗначенияСвойств(СтруктураИсточник, СтрокаТабличнойЧасти);
               
               ПараметрыВыпуска = Новый Соответствие;
               Для Каждого ПараметрВыпуска из ЗП.ПараметрыВыпускаПродукции Цикл
                   
                   Если ПараметрВыпуска.КлючСвязи = СтрокаТабличнойЧасти.КлючСвязи Тогда
                       ПараметрыВыпуска.Вставить(ПараметрВыпуска.ВидПараметра.Наименование, ПараметрВыпуска.Значение);
                   КонецЕсли;
                   
               КонецЦикла;
               
               Параметры.ПараметрыВыпуска = ПараметрыВыпуска;
               Параметры.КоличествоУровнейРазузлования = 1;
               Параметры.ДатаСпецификации = ЗП.Дата;
               
               МассивОшибок = РазузлованиеНоменклатуры.РазузловатьНоменклатуру(СтруктураИсточник, РезультатРазузлования, Параметры);
               
               Если МассивОшибок.Количество() > 0 Тогда
                   
                   Для каждого Ошибка из МассивОшибок Цикл
                       
                       ОбщегоНазначения.Сообщение("Ошибка: " + Ошибка.Причина, Ошибка.СтатусОшибки);
                       ОбщегоНазначения.Сообщение(" Спецификация: " + Ошибка.Спецификация);
                       ОбщегоНазначения.Сообщение(" Номер строки: " + Ошибка.НомерСтроки);
                       ОбщегоНазначения.Сообщение(" Описание ошибки: " + Ошибка.ОписаниеОшибки);
                       
                   КонецЦикла;
                   
               КонецЕсли;
               
               Если РезультатРазузлования.ИсходныеКомплектующие = Неопределено Тогда
                   Продолжить;
               КонецЕсли;
               
               ИсходныеКомплектующие = РезультатРазузлования.ИсходныеКомплектующие;
               
               ИсходныеКомплектующие.ЗаполнитьЗначения(тт.Значение, "Подразделение");
               //заполним подразделение по основной спецификации полуфабрикатов
               Для каждого Строка из ИсходныеКомплектующие цикл
                   ПодразделениеНоменклатуры = ЗаказыНаПроизводствоИПереработку.ПолучитьПодразделениеИзСпецификации(Строка.Спецификация,Строка.Номенклатура,Строка.ХарактеристикаНоменклатуры);
                   Если ЗначениеЗаполнено(ПодразделениеНоменклатуры) Тогда
                       Строка.Подразделение = ПодразделениеНоменклатуры;
                   КонецЕсли;
               КонецЦикла;
               
               ИсходныеКомплектующие.Колонки.Добавить("Продукция");
               ИсходныеКомплектующие.Колонки.Добавить("ХарактеристикаПродукции");
               
               ИсходныеКомплектующие.ЗаполнитьЗначения(СтрокаТабличнойЧасти.Номенклатура, "Продукция");
               ИсходныеКомплектующие.ЗаполнитьЗначения(СтрокаТабличнойЧасти.ХарактеристикаНоменклатуры, "ХарактеристикаПродукции");
               ИсходныеКомплектующие.ЗаполнитьЗначения(СтрокаТабличнойЧасти.Спецификация, "Спецификация");
               
               ОбщегоНазначения.ЗагрузитьВТаблицуЗначений(ИсходныеКомплектующие, ТаблицаИсходныеКомплектующие);
               
           КонецЦикла;
           
           ТаблицаИсходныеКомплектующие.Свернуть("Номенклатура, ХарактеристикаНоменклатуры, ЕдиницаИзмерения, Коэффициент, ВидВоспроизводства, Спецификация, Подразделение, Продукция, ХарактеристикаПродукции", "Количество");
           
           ЗП.Материалы.Загрузить(ТаблицаИсходныеКомплектующие);
           
           Для Каждого СтрокаТабличнойЧасти Из ЗП.Материалы Цикл
               
               ОбработкаТабличныхЧастей.ЗаполнитьЕдиницуМестТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект, Ложь);        
               
           КонецЦикла;
           ЗП.Записать();
           Сообщить("Документ "+СокрЛП(ЗП));
           // Вызываем процедуру для записанного документа
           СоздатьВнутреннийУровень(ЗП.Ссылка);
       КонецЦикла;
   Иначе
       Возврат;
   КонецЕсли;
   
КонецПроцедуры    

Процедура ПриИзменении(Элемент)
   //Вытаскиваем номер док-та в цифровом виде
   цц = "0123456789";
   ном = "";
   длинаНомера = СтрДлина(ПроизвЗаказ.Номер);
   ии = длинаНомера;
   Пока ии > 0 Цикл
       Если Найти(цц,Сред(ПроизвЗаказ.Номер,ии,1)) > 0 Тогда
           ном = Сред(ПроизвЗаказ.Номер,ии,1) + ном;
       Иначе
           Прервать;
       КонецЕсли;    
       ии = ии - 1;
   КонецЦикла;    
   ном = Строка(Формат(Число(ном),"ЧГ=0"))+"_";
   Длном = СтрДлина(ном);
   // Проверяем, есть ли уже подчиненные док-ты.
   Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
   |    ЗаказНаПроизводство.ОсновнойЗаказНаПроизводство
   |ИЗ
   |    Документ.ЗаказНаПроизводство КАК ЗаказНаПроизводство
   |ГДЕ
   |    (ЗаказНаПроизводство.ОсновнойЗаказНаПроизводство = &ОсновнойЗаказНаПроизводство
   |  ИЛИ ПОДСТРОКА(ЗаказНаПроизводство.Комментарий,1,&Длном) = &ном)
   |    И ЗаказНаПроизводство.Проведен = ИСТИНА";
   
   Запрос.УстановитьПараметр("ОсновнойЗаказНаПроизводство",ПроизвЗаказ.Ссылка);
   Запрос.УстановитьПараметр("Длном",Длном);
   Запрос.УстановитьПараметр("ном",ном);
   
   Выб = Запрос.Выполнить().Выбрать();
   Если Выб.Количество() > 0 Тогда
       Предупреждение("Для документа "+ СокрЛП(ПроизвЗаказ.Ссылка)+" уже выписаны документы Заказа!"+Символы.ПС+"Чтобы заново их создать, необходимо предварительно их удалить(пометить на удаление)!"+Символы.ПС+"Или выбрать верный документ!");
       Возврат;
   КонецЕсли;    
КонецПроцедуры
35 discant
 
22.06.12
13:56
Посмотрите, пожалуйста, можно с этим что-то сделать?
36 izekia
 
22.06.12
13:58
пятницааааа!
37 sergoqwe
 
22.06.12
14:04
Думаю ты поставил жирную точку ;)
38 discant
 
22.06.12
14:10
В смысле?
39 discant
 
22.06.12
14:25
Здесь создаются документы по списку подразделений? Я правильно понимаю? И можно ли этот алгоритм все же перекроить для решения моей задачи?
40 discant
 
22.06.12
15:20
Товарищи, услышьте же меня!
41 izekia
 
22.06.12
17:07
(40) обратитесь уже к специалисту
42 Orfin
 
22.06.12
23:25
тест

                   Если ЗначениеЗаполнено(ПодразделениеНоменклатуры) Тогда
                       Строка.Подразделение = ПодразделениеНоменклатуры;
                   КонецЕсли;
               КонецЦикла;
[code]
                   Если ЗначениеЗаполнено(ПодразделениеНоменклатуры) Тогда
                       Строка.Подразделение = ПодразделениеНоменклатуры;
                   КонецЕсли;
               КонецЦикла;[/code]
43 Orfin
 
22.06.12
23:30
Сообщения удалять свои нельзя? Как код отделить от текста? В смысле код выглядит ка код в 1С, а текст как текст.
44 catena
 
23.06.12
06:15
(43)Тэг [1С ].
45 discant
 
24.06.12
15:44
(42) Что вы имели ввиду?
46 Фокусник
 
24.06.12
16:02
(20) ИМХО, лучше так делать:

Если Ложь Тогда
Номенклатура = Справочники.Номенклатура.СоздатьЭлемент();
КонецЕсли;