|
Метод объекта не обнаружен | ☑ | ||
---|---|---|---|---|
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) ИМХО, лучше так делать:
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |