Имя: Пароль:
1C
1С v8
Документы ОтчетПроизводстваЗаСмену СоздатьДокумент
,
0 ay-vava
 
25.09.19
12:43
Вот уже 3 дня не могу программно заполнить спецификация продукта на 1с 8.1;

proi=Документы.ОтчетПроизводстваЗаСмену.СоздатьДокумент();
    proi.Дата=ТекущаяДата();
    proi.Организация=Справочники.Организации.НайтиПоКоду("000000001");
    proi.Склад=Справочники.Склады.НайтиПоКоду("000000003");
    proi.ПодразделениеОрганизации=Справочники.ПодразделенияОрганизаций.НайтиПоКоду("000000001");
    proi.ОтражатьВНалоговомУчете=Ложь;
    proi.ИспользоватьМатериалы=Истина;
    proi.СчетЗатрат=ПланыСчетов.Хозрасчетный.ОсновноеПроизводство;
    proi.Комментарий="Ав. созд.";
    
    Raw=proi.Продукция.Добавить();
    NНоменклатура=Справочники.Номенклатура.НайтиПоКоду("00000000013");
    Raw.Номенклатура=NНоменклатура;
    Raw.Количество=1;
    Raw.ПлановаяСтоимость=1;
    Raw.Счет=ПланыСчетов.Хозрасчетный.ГотоваяПродукция;
    Raw.Спецификация=Справочники.СпецификацииНоменклатуры.НайтиПоКоду("000000001");
    Raw.СуммаПлановая=1*1;
    Raw.НоменклатурнаяГруппа=Справочники.НоменклатурныеГруппы.НайтиПоКоду("000000001");

    Материалы=proi.Материалы.Добавить();

    
    
    proi.Записать();

Вот и сам код код очень простой просто добавить продукция на документ производство.
Через интерфейс я могу производить продукт но вот программно не смог. В интерфейсе на табличном части "Материалы" есть одно волшебная кнопка "Заполнить" и я хочу создать функции этого волшебную кнопку. Помогите пж кто сможет.
1 ДенисЧ
 
25.09.19
12:46
А если открыть функцию, которая вызывается по этой кнопке? Или это не наш метод, Шурик?
2 ay-vava
 
25.09.19
12:49
(1) я точно так и сделал но вот на коде есть ошибки

Результат       = УправлениеПроизводством.РассчитатьРасходСырьяПоСпецификации(Ссылка, "Продукция");
    РезультатУслуги = УправлениеПроизводством.РассчитатьРасходСырьяПоСпецификации(Ссылка, "Услуги");
    
    ТаблицаМатериалов = Результат.Выгрузить();
    ОбщегоНазначения.ЗагрузитьВТаблицуЗначений(РезультатУслуги.Выгрузить(), ТаблицаМатериалов);
    ТаблицаМатериалов.Свернуть("Номенклатура,ЕдиницаИзмерения,НоменклатурнаяГруппа", "Количество");
    
    Материалы.Загрузить(ТаблицаМатериалов);
    
    Для Каждого Стр Из Материалы Цикл
        ЗаполнитьСчетаУчетаВСтрокеТабЧасти(Стр, "Материалы", Истина, ОтражатьВНалоговомУчете);
        Стр.Коэффициент          = 1;
        Стр.ОтражениеВУСН        = Перечисления.ОтражениеВУСН.Принимаются;
        Стр.СтатьяЗатрат         = Стр.Номенклатура.СтатьяЗатрат;
        Стр.НоменклатурнаяГруппа = Стр.НоменклатурнаяГруппа;
    КонецЦикла;
3 ay-vava
 
25.09.19
12:50
(2) то есть ошибка появилось на моем коде.
4 hhhh
 
25.09.19
13:00
(3) ну, ошибка появилась, исправить. Ошибки они всегда появляются.
5 ay-vava
 
25.09.19
13:01
(4) если я смог уже сделал бы сам. для помощь к вам ОБРАЩАЮСЬ.
6 shuhard
 
25.09.19
13:03
(5) не ори - забанят (с)
7 hhhh
 
25.09.19
13:11
(5) если бы обращался, то всё бы подробно расписал, какая ошибка, где, в какой строчке. А это у тебя не обращение.
8 ДенисЧ
 
25.09.19
13:11
(3) (5) Ошибку озвучить Сарумян не позволяет?
9 ay-vava
 
25.09.19
13:14
(7) Хочу добавить на табличный часть "Материалы" спецификации переменной NНоменклатура(имеет спецификации) программно
10 ДенисЧ
 
25.09.19
13:15
(9) Это ты очень подробно ответил на вопрос "какая ошибка, где, в какой строчке"...
11 ay-vava
 
25.09.19
13:17
(10) Забудьте об этом.
12 Джинн
 
25.09.19
13:18
Убивал бы за смесь кириллицы и латиницы без крайней на то необходимости!
13 Консультант Баранов
 
25.09.19
13:19
(9) Хоти, это можно.

Если у тебя ошибки то сделай скриншот и выложи, телепатов тут не очень много.

Но для начала  попробуй

Материалы.Загрузить(ТаблицаМатериалов);
    
    Для Каждого Стр Из Материалы Цикл

Заменить на

proi.Материалы.Загрузить(ТаблицаМатериалов);
    
    Для Каждого Стр Из proi.Материалы Цикл
14 ay-vava
 
25.09.19
13:23
(13) Спасибо для ответа что поставить в место Ссылка на

Результат       = УправлениеПроизводством.РассчитатьРасходСырьяПоСпецификации(<font color='red'>Ссылка</font>, "Продукция");
    РезультатУслуги = УправлениеПроизводством.РассчитатьРасходСырьяПоСпецификации(Ссылка, "Услуги");
15 ay-vava
 
25.09.19
13:26
(10) {ОбщийМодуль.УправлениеПроизводством(280)}: Ошибка при вызове метода контекста (Выполнить): {(18, 3)}: Таблица не найдена "Документ.Номенклатура.Продукция"
<<?>>Документ.Номенклатура.Продукция КАК ДокументОснованиеТаблица
        Возврат Запрос.Выполнить();
по причине:
{(18, 3)}: Таблица не найдена "Документ.Номенклатура.Продукция"
<<?>>Документ.Номенклатура.Продукция КАК ДокументОснованиеТаблица
16 ay-vava
 
25.09.19
13:46
(15) есть кто???
17 Креатив
 
25.09.19
13:52
(15)Смотри запрос,который выполняется в 280-й строке ОбщийМодуль.УправлениеПроизводством.
18 ay-vava
 
25.09.19
13:52
(7) ну хот ответ Никулка.
19 Креатив
 
25.09.19
13:53
Вероятней всего у документа Номенклатура нет таблицы продукция.
20 ay-vava
 
25.09.19
13:59
(19) Да правильно
21 Консультант Баранов
 
25.09.19
15:08
(14) proi.ССылка
22 Консультант Баранов
 
25.09.19
15:09
(15) Весь текст модуля выложи
23 ay-vava
 
25.09.19
15:54
(22)     proi=Документы.ОтчетПроизводстваЗаСмену.СоздатьДокумент();
    proi.Дата=ТекущаяДата();
    proi.Организация=Справочники.Организации.НайтиПоКоду("000000001");
    proi.Склад=Справочники.Склады.НайтиПоКоду("000000003");
    proi.ПодразделениеОрганизации=Справочники.ПодразделенияОрганизаций.НайтиПоКоду("000000001");
    proi.ОтражатьВНалоговомУчете=Ложь;
    proi.ИспользоватьМатериалы=Истина;
    proi.СчетЗатрат=ПланыСчетов.Хозрасчетный.ОсновноеПроизводство;
    proi.Комментарий="Ав. созд.";
    
    Raw=proi.Продукция.Добавить();
    NНоменклатура=Справочники.Номенклатура.НайтиПоКоду("00000000016");
    Raw.Номенклатура=NНоменклатура;
    Raw.Количество=1;
    Raw.ПлановаяСтоимость=1;
    Raw.Счет=ПланыСчетов.Хозрасчетный.ГотоваяПродукция;
    Raw.Спецификация=Справочники.СпецификацииНоменклатуры.НайтиПоКоду("000000002");
    Raw.СуммаПлановая=1*1;
    Raw.НоменклатурнаяГруппа=Справочники.НоменклатурныеГруппы.НайтиПоКоду("000000001");
    
    Запрос = Новый Запрос;
    Запрос.Текст="ВЫБРАТЬ
                          | ЕСТЬNULL(СпецификацииНоменклатурыИсходныеКомплектующие.Количество, 0) КАК Количество,
                          | СпецификацииНоменклатурыИсходныеКомплектующие.Номенклатура.Ссылка КАК Номенклатура,
                          | СпецификацииНоменклатуры.Владелец.Ссылка КАК Владелец,
                          | СпецификацииНоменклатуры.Ссылка КАК СпецификацияСсылка
                          |ИЗ
                          | Справочник.СпецификацииНоменклатуры.ИсходныеКомплектующие КАК СпецификацииНоменклатурыИсходныеКомплектующие
                          |     ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СпецификацииНоменклатуры КАК СпецификацииНоменклатуры
                          |         ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
                          |         ПО (РеализацияТоваровУслуг.Товары.Номенклатура.Ссылка = СпецификацииНоменклатуры.Владелец.Ссылка)
                          |     ПО СпецификацииНоменклатурыИсходныеКомплектующие.Ссылка = СпецификацииНоменклатуры.Ссылка
                          |ГДЕ
                          | СпецификацииНоменклатуры.Ссылка = &Ссылка";
    Запрос.УстановитьПараметр("Ссылка", Raw.Спецификация);  
    Результат = Запрос.Выполнить();    
    Выборка = Результат.Выбрать();
    
    Пока Выборка.Следующий()Цикл
        Если Raw.Номенклатура = Выборка.Владелец Тогда  
               //Raw.Спецификация = Выборка.СпецификацияСсылка;
                    Если Не Raw.Спецификация.Пустая() Тогда                                                    
                                СтрМатериалов = proi.Материалы.Добавить();                            
                                СтрМатериалов.Номенклатура = Выборка.Номенклатура;
                                СтрМатериалов.Счет = ПланыСчетов.Хозрасчетный.СырьеИМатериалы;
                                СтрМатериалов.НоменклатурнаяГруппа = Справочники.НоменклатурныеГруппы.НайтиПоНаименованию("Основная номенклатурная группа");
                                СтрМатериалов.СтатьяЗатрат = Справочники.СтатьиЗатрат.НайтиПоНаименованию("Материальные расходы");
                                СтрМатериалов.Количество = Выборка.Количество*Raw.Количество;
                                proi.Материалы.Свернуть("Номенклатура, Счет, НоменклатурнаяГруппа, СтатьяЗатрат", "Количество");
                    КонецЕсли;
        КонецЕсли;                  
    КонецЦикла;
    
    proi.Записать();

вот таким образом хорошо работает но есть один проблема не смог решить
24 ay-vava
 
25.09.19
15:55
Raw.Спецификация=Справочники.СпецификацииНоменклатуры.НайтиПоКоду("000000002");

вот код но мне нужен чтобы Raw.Спецификация я получить от NНоменклатура это возможно??
25 Консультант Баранов
 
25.09.19
16:09
У номенклатуры есть реквизит  ОсновнаяСпецификацияНоменклатуры
26 ay-vava
 
25.09.19
16:25
(25) Я так и сделал даже. Но не получилось.
27 Консультант Баранов
 
25.09.19
16:26
(26) А это поле заполнено?
28 ay-vava
 
25.09.19
16:29
(25) Raw.Спецификация=NНоменклатура.ОсновнаяСпецификацияНоменклатуры.Ссылка;

вот так да?
29 Консультант Баранов
 
25.09.19
16:30
Да.


Или так
Raw.Спецификация=NНоменклатура.ОсновнаяСпецификацияНоменклатуры;
30 ay-vava
 
25.09.19
16:31
к сожалению не получилось.
31 Свин-опёр
 
25.09.19
16:33
(30) У самой номенклатуры это поле заполнено?
32 ay-vava
 
25.09.19
16:33
(29) УправлениеПроизводством.ОпределитьСпецификациюПоУмолчанию(NНоменклатура,ТекущаяДата())

даже вот так и делал
33 ay-vava
 
25.09.19
16:34
Raw.Спецификация=УправлениеПроизводством.ОпределитьСпецификациюПоУмолчанию(NНоменклатура,ТекущаяДата())
34 Консультант Баранов
 
25.09.19
16:37
вбрСпецф = Справочники.НоменклатурныеГруппы.Выбрать(,NНоменклатура);
Если  вбрСпецф.Следующий() ТОгда
    Raw.Спецификация = вбрСпецф.Ссылка;
КонецЕсли;
35 ay-vava
 
25.09.19
16:37
Сообщить(NНоменклатура.ОсновнаяСпецификацияНоменклатуры.Наименование);

нечего не выводить.
36 VladZ
 
25.09.19
16:41
(35) Брось, не твоё это.
37 Консультант Баранов
 
25.09.19
16:42
(35) Значит поле не заполнено.
38 3achem
 
25.09.19
16:46
(35) Не оставляйте попыток! Я думаю всё дело в том, что вы часть пишите по-русски, а часть на английском! Пишите всё на английском!
39 ay-vava
 
25.09.19
16:52
Ребята. Не издевайтесь пожалуйста.
40 ay-vava
 
25.09.19
16:56
(34) Здесь немного Вы автомат ошиблись

    вбрСпецф = Справочники.СпецификацииНоменклатуры.Выбрать(,NНоменклатура);
    Если  вбрСпецф.Следующий() ТОгда
        Raw.Спецификация = вбрСпецф.Ссылка;
    КонецЕсли;

я просто поменял част кода от НоменклатурныеГруппы на СпецификацииНоменклатуры
41 ay-vava
 
25.09.19
16:57
(34) Но Вам ОГРОМНАЯ СПАСИБО ЗА ПОМОЩЬ.
42 ay-vava
 
25.09.19
16:58
proi=Документы.ОтчетПроизводстваЗаСмену.СоздатьДокумент();
    proi.Дата=ТекущаяДата();
    proi.Организация=Справочники.Организации.НайтиПоКоду("000000001");
    proi.Склад=Справочники.Склады.НайтиПоКоду("000000003");
    proi.ПодразделениеОрганизации=Справочники.ПодразделенияОрганизаций.НайтиПоКоду("000000001");
    proi.ОтражатьВНалоговомУчете=Ложь;
    proi.ИспользоватьМатериалы=Истина;
    proi.СчетЗатрат=ПланыСчетов.Хозрасчетный.ОсновноеПроизводство;
    proi.Комментарий="Ав. созд.";
    
    Raw=proi.Продукция.Добавить();
    NНоменклатура=Справочники.Номенклатура.НайтиПоКоду("00000000016");
    Raw.Номенклатура=NНоменклатура;
    Raw.Количество=1;
    Raw.ПлановаяСтоимость=1;
    Raw.Счет=ПланыСчетов.Хозрасчетный.ГотоваяПродукция;
    
    вбрСпецф = Справочники.СпецификацииНоменклатуры.Выбрать(,NНоменклатура);
    Если  вбрСпецф.Следующий() ТОгда
        Raw.Спецификация = вбрСпецф.Ссылка;
    КонецЕсли;
    
    Raw.СуммаПлановая=1*1;
    Raw.НоменклатурнаяГруппа=Справочники.НоменклатурныеГруппы.НайтиПоКоду("000000001");
    
    Запрос = Новый Запрос;
    Запрос.Текст="ВЫБРАТЬ
                          | ЕСТЬNULL(СпецификацииНоменклатурыИсходныеКомплектующие.Количество, 0) КАК Количество,
                          | СпецификацииНоменклатурыИсходныеКомплектующие.Номенклатура.Ссылка КАК Номенклатура,
                          | СпецификацииНоменклатуры.Владелец.Ссылка КАК Владелец,
                          | СпецификацииНоменклатуры.Ссылка КАК СпецификацияСсылка
                          |ИЗ
                          | Справочник.СпецификацииНоменклатуры.ИсходныеКомплектующие КАК СпецификацииНоменклатурыИсходныеКомплектующие
                          |     ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СпецификацииНоменклатуры КАК СпецификацииНоменклатуры
                          |         ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
                          |         ПО (РеализацияТоваровУслуг.Товары.Номенклатура.Ссылка = СпецификацииНоменклатуры.Владелец.Ссылка)
                          |     ПО СпецификацииНоменклатурыИсходныеКомплектующие.Ссылка = СпецификацииНоменклатуры.Ссылка
                          |ГДЕ
                          | СпецификацииНоменклатуры.Ссылка = &Ссылка";
    Запрос.УстановитьПараметр("Ссылка", Raw.Спецификация);  
    Результат = Запрос.Выполнить();    
    Выборка = Результат.Выбрать();
    
    Пока Выборка.Следующий()Цикл
        Если Raw.Номенклатура = Выборка.Владелец Тогда  
                    Если Не Raw.Спецификация.Пустая() Тогда                                                    
                                СтрМатериалов = proi.Материалы.Добавить();                            
                                СтрМатериалов.Номенклатура = Выборка.Номенклатура;
                                СтрМатериалов.Счет = ПланыСчетов.Хозрасчетный.СырьеИМатериалы;
                                СтрМатериалов.НоменклатурнаяГруппа = Справочники.НоменклатурныеГруппы.НайтиПоНаименованию("Основная номенклатурная группа");
                                СтрМатериалов.СтатьяЗатрат = Справочники.СтатьиЗатрат.НайтиПоНаименованию("Материальные расходы");
                                СтрМатериалов.Количество = Выборка.Количество*Raw.Количество;
                                proi.Материалы.Свернуть("Номенклатура, Счет, НоменклатурнаяГруппа, СтатьяЗатрат", "Количество");
                    КонецЕсли;
        КонецЕсли;                  
    КонецЦикла;
    
    proi.Записать();
43 ay-vava
 
25.09.19
16:59
Вот код если кому нежен пожалуйста.