Форум программистов, компьютерный форум, киберфорум
Наши страницы
1С: Типовые и стандартные решения
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
Татьянка22
1 / 0 / 0
Регистрация: 23.04.2014
Сообщений: 30
1

УТ 11. Программно установить серию номенклатуры в документе

09.04.2017, 13:28. Просмотров 1363. Ответов 11
Метки нет (Все метки)

Добрый день. Стоит такая задача: На форму документа "Заказ покупателя" вывести кнопку,при нажатии которой будет создаваться документ "Возврат товаров Поставщику". (Не буду расписывать для чего и как,дабы не забивать головы ненужной информацией). Собственно,документ создается,все нормально, но столкнулась с проблемой: необходимо в созданном документе программно указать серию возвращаемых товаров (не по фифо, а по сроку годности, т.е. ту,у которой ближайший срок годности к дате документа). Проблема в том,что справочник "СерииНоменклатуры" не подчиненный. Буду очень признательна, если кто-нибудь подскажет, как правильно это сделать. Может быть,кто-то уже сталкивался с этим. Заранее спасибо!
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.04.2017, 13:28
Ответы с готовыми решениями:

Программно создание Характеристик номенклатуры
Здравствуйте подскажите кто нибудь как можно программно создать характеристику номенклатуры в УТ...

Программно записать характеристики номенклатуры
Приветствую. Мне нужно записать программно характеристики некоторой номенклатуры. Характеристики...

Программно установить Русскую раскладку клавиатуры (именно установить, не активировать)
Прошу помощи. Необходимо Программно установить Русскую раскладку клавиатуры в английскую версию...

1cv77 Торговля и Склад. Установить фильтр в списке номенклатуры
Доброго времени суток! Помогите решить задачку. Заключается она в след. Есть справочник...

Как установить штрих-кода на все товары номенклатуры? 1С 8.2 УТП 1.2
Здравствуйте! Интересует такой вопрос, как установить(и в дальнейшем устанавливать) штрих-кода...

11
polax
931 / 608 / 205
Регистрация: 16.01.2015
Сообщений: 2,149
09.04.2017, 15:45 2
Попробуйте нужные данные тянуть не из справочника а из Регистра накопления ДвиженияСерийТоваров
1
Татьянка22
1 / 0 / 0
Регистрация: 23.04.2014
Сообщений: 30
09.04.2017, 16:03  [ТС] 3
polax, Пока ждала ответа,поняла,что можно вытянуть серии из регистра накопления "ТоварыНаСкладахОстаткиИОбороты" обычным запросом. Написала прямо "в лоб": перебрала записи с остаткам по номенклатуры и сериям> 0,упорядочила по реквизиту "ГоденДо" и взяла первую запись. Поняла,что документ проводится,серия указывается. НО! это работает только лишь в том случае,если у серии с ближайшем сроком годности хватает количества на остатке. Возникает вопрос? что,если есть серии 1) 09848 годен до 16.04.17 - на остатке 200 ед. и 2)098 годен до 30.04.17 - на остатке 500 ед. А нам необходимо отдать поставщику 300 ед. В этом случае,по понятным причинам мой метод "в лоб" не работает. Не поможете с алгоритмом запроса?
0
GreenkA
Форумчанин
Эксперт 1С
2994 / 1920 / 520
Регистрация: 25.06.2009
Сообщений: 6,784
09.04.2017, 16:06 4
Цитата Сообщение от Татьянка22 Посмотреть сообщение
упорядочила по реквизиту "ГоденДо" и взяла первую запись
Брать не первую запись, а добавлять столько записей по сериям, которые есть в наличие, сколько надо. Прерывать обход выборки запроса, когда для нужного количества товара найдены серии.
0
09.04.2017, 16:06
Татьянка22
1 / 0 / 0
Регистрация: 23.04.2014
Сообщений: 30
09.04.2017, 16:07  [ТС] 5
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
          Запрос=Новый запрос;
              Запрос.Текст=
                  "ВЫБРАТЬ ПЕРВЫЕ 1
                  | ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
                  | ТоварыНаСкладахОстаткиИОбороты.Склад,
                  | ТоварыНаСкладахОстаткиИОбороты.Серия,
                  | ТоварыНаСкладахОстаткиИОбороты.Серия.ГоденДо КАК СерияГоденДо,
                  | ТоварыНаСкладахОстаткиИОбороты.ВНаличииКонечныйОстаток
                  |ИЗ
                  | РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&ТекущаяДата, , , , ) КАК ТоварыНаСкладахОстаткиИОбороты
                  |ГДЕ
                  | ТоварыНаСкладахОстаткиИОбороты.Склад = &склад
                  | И ТоварыНаСкладахОстаткиИОбороты.ВНаличииКонечныйОстаток > &Ноль
                  | И ТоварыНаСкладахОстаткиИОбороты.Номенклатура = &номенклатура
                  |
                  |УПОРЯДОЧИТЬ ПО
                  | СерияГоденДо";
               Запрос.УстановитьПараметр("ТекущаяДата",ТекущаяДата());
               Запрос.УстановитьПараметр("склад",НовыйДок.Склад);
               Запрос.УстановитьПараметр("Ноль",0);
               Запрос.УстановитьПараметр("номенклатура",ДокСтр.Номенклатура);
               РезультатЗапроса=Запрос.Выполнить(); 
               Выборка = РезультатЗапроса.Выбрать();
               Пока Выборка.Следующий() цикл
                   Если Выборка.ВНаличииКонечныйОстаток>=ДокСтр.КоличествоУпаковок тогда
                   ДокСер=новыйДок.Серии.Добавить();
                   ДокСер.Номенклатура=Выборка.Номенклатура;
                   ДокСер.Количество=ДокСтр.КоличествоУпаковок;
                   ДокСер.Серия=Выборка.Серия; 
               Иначе
 
                   ДокСер=новыйДок.Серии.Добавить();
                   ДокСер.Номенклатура=Выборка.Номенклатура;
                   ДокСер.Количество=Выборка.ВНаличииКонечныйОстаток;
                   ДокСер.Серия=Выборка.Серия;
 
                   КонецЕсли;
                   КонецЦикла;
0
GreenkA
Форумчанин
Эксперт 1С
2994 / 1920 / 520
Регистрация: 25.06.2009
Сообщений: 6,784
09.04.2017, 16:11 6
Татьянка22, покажите весь код. Я так понимаю, это еще в одном цикле обхода строк документа? ДокСтр...
1
Татьянка22
1 / 0 / 0
Регистрация: 23.04.2014
Сообщений: 30
09.04.2017, 16:47  [ТС] 7
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
&НаСервере
Функция СоздатьДокументыНаСервере()
    
    
    
    ТаблицаФормы=Объект.Товары.Выгрузить();
    Для каждого стрТЧ из ТаблицаФормы цикл
        Если НЕ стрТЧ.Склад1=Объект.Склад тогда
            НовыйДок = Документы.ВозвратТоваровПоставщику.СоздатьДокумент();
            НовыйДок.Дата = ТекущаяДата();
            
            
            Если Объект.Организация.Наименование=Справочники.Организации.НайтиПоНаименованию("АгроХимСервис ООО") тогда
                НовыйДок.Организация=Справочники.Организации.НайтиПоНаименованию("АгроХимСервис ООО (хранение)");
            КонецЕсли;
            НовыйДок.Организация=Объект.Организация;
            НовыйДок.Партнер=стрТЧ.Склад1.Партнер;
            НовыйДок.Контрагент=стрТЧ.Склад1.Контрагент;
            НовыйДок.Склад=СтрТЧ.Склад1;
            НовыйДок.ХозяйственнаяОперация=Перечисления.ХозяйственныеОперации.ВозвратТоваровПоставщику;
            НовыйДок.ЦенаВключаетНДС=Истина;
            НовыйДок.НалогообложениеНДС=Перечисления.ТипыНалогообложенияНДС.ПродажаОблагаетсяНДС;
            НовыйДок.СпособДоставки=Перечисления.СпособыДоставки.ДоКлиента;
            НовыйДок.АдресДоставки=ФормированиеПечатныхФорм.ПолучитьАдресИзКонтактнойИнформации(стрТЧ.Склад1.Контрагент, "Юридический");
            НовыйДок.СпособКомпенсации=Перечисления.СпособыКомпенсацииВозвратовТоваров.ВернутьДенежныеСредства;
            
            ДокСтр = НовыйДок.Товары.Добавить();
            ДокСтр.Номенклатура = стрТЧ.Номенклатура;
            ДокСтр.Количество = стрТЧ.Количество;
            ДокСтр.КоличествоУпаковок=стрТЧ.Количество;
            ДокСтр.Цена = "0.01";
            ДокСтр.Сумма = ДокСтр.Количество*ДокСтр.Цена;
            ДокСтр.СтавкаНДС=Перечисления.СтавкиНДС.НДС18;
            
            Запрос=Новый запрос;
            Запрос.Текст=
            "ВЫБРАТЬ ПЕРВЫЕ 1
            |   ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
            |   ТоварыНаСкладахОстаткиИОбороты.Склад,
            |   ТоварыНаСкладахОстаткиИОбороты.Серия,
            |   ТоварыНаСкладахОстаткиИОбороты.Серия.ГоденДо КАК СерияГоденДо,
            |   ТоварыНаСкладахОстаткиИОбороты.ВНаличииКонечныйОстаток
            |ИЗ
            |   РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&ТекущаяДата, , , , ) КАК ТоварыНаСкладахОстаткиИОбороты
            |ГДЕ
            |   ТоварыНаСкладахОстаткиИОбороты.Склад = &склад
            |   И ТоварыНаСкладахОстаткиИОбороты.ВНаличииКонечныйОстаток > &Ноль
            |   И ТоварыНаСкладахОстаткиИОбороты.Номенклатура = &номенклатура
            |
            |УПОРЯДОЧИТЬ ПО
            |   СерияГоденДо";
            Запрос.УстановитьПараметр("ТекущаяДата",ТекущаяДата());
            Запрос.УстановитьПараметр("склад",НовыйДок.Склад);
            Запрос.УстановитьПараметр("Ноль",0);
            Запрос.УстановитьПараметр("номенклатура",ДокСтр.Номенклатура);
            РезультатЗапроса=Запрос.Выполнить();    
            Выборка = РезультатЗапроса.Выбрать();
            Пока Выборка.Следующий() цикл
                Если Выборка.ВНаличииКонечныйОстаток>=ДокСтр.КоличествоУпаковок тогда
                    ДокСер=новыйДок.Серии.Добавить();
                    ДокСер.Номенклатура=Выборка.Номенклатура;
                    ДокСер.Количество=ДокСтр.КоличествоУпаковок;
                    ДокСер.Серия=Выборка.Серия;
                    
                Иначе
                    
                    ДокСер=новыйДок.Серии.Добавить();
                    ДокСер.Номенклатура=Выборка.Номенклатура;
                    ДокСер.Количество=Выборка.ВНаличииКонечныйОстаток;
                    ДокСер.Серия=Выборка.Серия;
                    
                КонецЕсли;
            КонецЦикла;
            
        КонецЕсли;        
    КонецЦикла;
    Попытка
        НовыйДок.ОбменДанными.Загрузка = Истина;
        НовыйДок.Записать(РежимЗаписиДокумента.Запись, РежимПроведенияДокумента.Неоперативный);
        Возврат НовыйДок.Ссылка;
        
    Исключение
        Попытка
            НовыйДок.ОбменДанными.Загрузка = Ложь;
            НовыйДок.Записать(РежимЗаписиДокумента.Запись, РежимПроведенияДокумента.Неоперативный);
            Возврат НовыйДок.Ссылка;
        Исключение
            
            Возврат Документы.ЗаказПоставщику.ПустаяСсылка();
        КонецПопытки;
    КонецПопытки;
    
    
    
    
    
КонецФункции
Добавлено через 13 минут
Цитата Сообщение от GreenkA Посмотреть сообщение
Я так понимаю, это еще в одном цикле обхода строк документа? ДокСтр...
Да,правильно. Суть в том,что в табличной части "Товары" в документе "ЗаказПокупателя" есть часть товара,который находится как на нашем складе(склад отгрузки),и часть на других складах(наших),но с товаром наших поставщиков(принятых на отв. хранение.). Так вот,перед отгрузкой клиенту, необходимо вернуть недостающий товар с ответственного хранения поставщику,а затем купить его у него на склад реализации. Поэтому и появился реквизит в табл. части "Склад1". В данном коде при нажатии кнопки на форме "создать документы, создается документ "возврат товаров поставщику" для недостающего товара со склада,который укажет менеджер.

Добавлено через 16 минут
Все получилось.Код прилагаю,может кому-то поможет,когда-нибудь.
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Запрос=Новый запрос;
            Запрос.Текст=
            "ВЫБРАТЬ
            |   ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
            |   ТоварыНаСкладахОстаткиИОбороты.Склад,
            |   ТоварыНаСкладахОстаткиИОбороты.Серия,
            |   ТоварыНаСкладахОстаткиИОбороты.Серия.ГоденДо КАК СерияГоденДо,
            |   ТоварыНаСкладахОстаткиИОбороты.ВНаличииКонечныйОстаток
            |ИЗ
            |   РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&ТекущаяДата, , , , ) КАК ТоварыНаСкладахОстаткиИОбороты
            |ГДЕ
            |   ТоварыНаСкладахОстаткиИОбороты.Склад = &склад
            |   И ТоварыНаСкладахОстаткиИОбороты.ВНаличииКонечныйОстаток > &Ноль
            |   И ТоварыНаСкладахОстаткиИОбороты.Номенклатура = &номенклатура
            |
            |УПОРЯДОЧИТЬ ПО
            |   СерияГоденДо";
            Запрос.УстановитьПараметр("ТекущаяДата",ТекущаяДата());
            Запрос.УстановитьПараметр("склад",НовыйДок.Склад);
            Запрос.УстановитьПараметр("Ноль",0);
            Запрос.УстановитьПараметр("номенклатура",ДокСтр.Номенклатура);
            РезультатЗапроса=Запрос.Выполнить();    
            Выборка = РезультатЗапроса.Выбрать();
            Количество=ДокСтр.КоличествоУпаковок;
            Пока Выборка.Следующий() цикл
                Если количество>0 тогда
                Если Выборка.ВНаличииКонечныйОстаток>=Количество тогда
                    ДокСер=новыйДок.Серии.Добавить();
                    ДокСер.Номенклатура=Выборка.Номенклатура;
                    ДокСер.Количество=Количество;
                    ДокСер.Серия=Выборка.Серия;
                    Количество=Количество-ДокСер.Количество;
                    
                Иначе
                    
                    ДокСер=новыйДок.Серии.Добавить();
                    ДокСер.Номенклатура=Выборка.Номенклатура;
                    ДокСер.Количество=Выборка.ВНаличииКонечныйОстаток;
                    ДокСер.Серия=Выборка.Серия;
                    Количество=Количество-ДокСер.Количество;
                КонецЕсли;
                КонецЕсли;
            КонецЦикла;
0
GreenkA
Форумчанин
Эксперт 1С
2994 / 1920 / 520
Регистрация: 25.06.2009
Сообщений: 6,784
09.04.2017, 16:54 8
Татьянка22, и все работает?) Я тут уже разогналась писать пакетный запрос с временной таблицей по документу, чтобы не надо было выполнять запрос в цикле обхода строк ТЧ...
По остальной части кода, лично у меня вопросы:
- почему Цена у документа задается Строкой, а не Числом?
- вот это условие у вас никогда не сработает. Опять же из-за типов: первое значение - строка, второе значение СправочникСсылка:
1C
1
2
3
    Если Объект.Организация.Наименование=Справочники.Организации.НайтиПоНаименованию("АгроХимСервис ООО") тогда
        НовыйДок.Организация=Справочники.Организации.НайтиПоНаименованию("АгроХимСервис ООО (хранение)");
    КонецЕсли;
1
Татьянка22
1 / 0 / 0
Регистрация: 23.04.2014
Сообщений: 30
09.04.2017, 17:08  [ТС] 9
Цитата Сообщение от GreenkA Посмотреть сообщение
и все работает?)
правда,все серии заполняются верно)Сама в шоке. Т.к. программировать меня никто не учил, пытаюсь выкручиваться,как придумаю
Цитата Сообщение от GreenkA Посмотреть сообщение
- почему Цена у документа задается Строкой, а не Числом?
цена тут формальность, она не важна при возврате.
Цитата Сообщение от GreenkA Посмотреть сообщение
вот это условие у вас никогда не сработает. Опять же из-за типов: первое значение - строка, второе значение СправочникСсылка:
1C
1
2
3
Если Объект.Организация.Наименование=Справочники.Организации.НайтиПоНаименованию("АгроХимСервис ООО") тогда
 НовыйДок.Организация=Справочники.Организации.НайтиПоНаименованию("АгроХимСервис ООО (хранение)");
КонецЕсли;
Да,я заметила) но это мелочь совсем,перепишу)

А,если честно,очень интересно, как правильно было бы написать этот запрос.
0
GreenkA
Форумчанин
Эксперт 1С
2994 / 1920 / 520
Регистрация: 25.06.2009
Сообщений: 6,784
09.04.2017, 17:42 10
Лучший ответ Сообщение было отмечено Татьянка22 как решение

Решение

Татьянка22, примерно так, только надо тестить) у меня данных нет в регистре...
Смысл в том, чтобы перед формированием документов "Возврата поставщику" записать документ. В первом пакете запроса создаем временную таблицу по табличной части этого документа(отбор по ссылке), далее соединяем левым соединением с таблицей регистра по полям Номенклатура и Склад. Делаем итоги по Складу и Номенклатуре.
По Складу итоги нужны: чтобы сразу сгруппировать записи по Складам, создавать для каждого Склада только один документ. По Номенклатуре итоги: чтобы потом отдельно обходить Серии для каждого товара.
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
//Записать объект перед формированием документов, чтобы можно было по документу сделать пакетный запрос - 
//без цикла по табличной части Товары выбрать всю нужную информацию по сериям из регистра и сгруппировать по складу и товарам
Запрос = Новый запрос;
Запрос.Текст=
"ВЫБРАТЬ
|   ЗаказКлиентаТовары.Номенклатура,
|   ЗаказКлиентаТовары.КоличествоУпаковок,
|   ЗаказКлиентаТовары.Склад1 КАК Склад
|ПОМЕСТИТЬ Док
|ИЗ
|   Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары
|ГДЕ
|   ЗаказКлиентаТовары.Ссылка = &Ссылка
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|   ТоварыНаСкладахОстатки.Серия,
|   ТоварыНаСкладахОстатки.Серия.ГоденДо КАК СерияГоденДо,
|   ЕСТЬNULL(ТоварыНаСкладахОстатки.ВНаличииОстаток, 0) КАК ВНаличииОстаток,
|   Док.Номенклатура КАК Номенклатура,
|   Док.КоличествоУпаковок КАК КоличествоУпаковок,
|   Док.Склад КАК Склад
|ИЗ
|   Док КАК Док
|       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(
|               &ДатаДок,
|               Номенклатура В
|                   (ВЫБРАТЬ
|                       Док.Номенклатура
|                   ИЗ
|                       Док КАК Док)) КАК ТоварыНаСкладахОстатки
|       ПО Док.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура
|           И Док.Склад = ТоварыНаСкладахОстатки.Склад
|ГДЕ
|   ТоварыНаСкладахОстатки.Склад = &склад
|   И ТоварыНаСкладахОстатки.Номенклатура = &номенклатура
|
|УПОРЯДОЧИТЬ ПО
|   СерияГоденДо
|ИТОГИ
|   СУММА(ВНаличииОстаток),
|   МАКСИМУМ(КоличествоУпаковок)
|ПО
|   Склад,
|   Номенклатура";
Запрос.УстановитьПараметр("ДатаДок",Объект.Дата);
Запрос.УстановитьПараметр("Ссылка",Объект.Ссылка);
ВыборкаПоСкладам = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
 
Пока ВыборкаПоСкладам.Следующий() Цикл
    НовыйДок = Документы.ВозвратТоваровПоставщику.СоздатьДокумент();
    НовыйДок.Дата = ТекущаяДата();
    НовыйДок.Организация = Объект.Организация;
    НовыйДок.Партнер = ВыборкаПоСкладам.Склад.Партнер;
    НовыйДок.Контрагент = ВыборкаПоСкладам.Склад.Контрагент;
    НовыйДок.Склад = ВыборкаПоСкладам.Склад;
    НовыйДок.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ВозвратТоваровПоставщику;
    НовыйДок.ЦенаВключаетНДС = Истина;
    НовыйДок.НалогообложениеНДС = Перечисления.ТипыНалогообложенияНДС.ПродажаОблагаетсяНДС;
    НовыйДок.СпособДоставки = Перечисления.СпособыДоставки.ДоКлиента;
    НовыйДок.АдресДоставки = ФормированиеПечатныхФорм.ПолучитьАдресИзКонтактнойИнформации(ВыборкаПоСкладам.Склад.Контрагент, "Юридический");
    НовыйДок.СпособКомпенсации = Перечисления.СпособыКомпенсацииВозвратовТоваров.ВернутьДенежныеСредства;
    
    ВыборкаПоТовару = ВыборкаПоСкладам.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    Пока ВыборкаПоТовару.Следующий() Цикл
        //здесь сразу идет проверка на ситуацию, когда по всем сериям не нашлось нужного количества товара.
        //что при этом будете делать?)
        Если ВыборкаПоТовару.КоличествоУпаковок > ВыборкаПоТовару.ВНаличииОстаток Тогда
            Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = "По номенклатуре " + """" + СокрЛП(ВыборкаПоТовару.Номенклатура) + """" + " не хватает товара. В наличии " + Строка(ВыборкаПоТовару.ВНаличииОстаток);
            Сообщение.Сообщить();
            Продолжить;
        КонецЕсли;
        
        ДокСтр = НовыйДок.Товары.Добавить();
        ДокСтр.Номенклатура = ВыборкаПоТовару.Номенклатура;
        ДокСтр.Количество = ВыборкаПоТовару.КоличествоУпаковок;
        ДокСтр.КоличествоУпаковок = ДокСтр.Количество;
        //ДокСтр.Цена = "0.01";  //цена строкой?
        ДокСтр.Цена = 0.01;
        ДокСтр.Сумма = ДокСтр.Количество*ДокСтр.Цена;
        ДокСтр.СтавкаНДС = Перечисления.СтавкиНДС.НДС18;
        
        //обход всей серий
        Выборка = ВыборкаПоТовару.Выбрать();
        ОсталосьКоличество = ВыборкаПоТовару.КоличествоУпаковок;
        Пока Выборка.Следующий() Цикл       
            Если ОсталосьКоличество > 0 Тогда
                ДокСер = НовыйДок.Серии.Добавить();
                ДокСер.Номенклатура = Выборка.Номенклатура;
                ДокСер.Количество = МИН(ОсталосьКоличество, Выборка.ВНаличииОстаток);
                ДокСер.Серия = Выборка.Серия;
                ОсталосьКоличество = ОсталосьКоличество - ДокСер.Количество;
                
                ДокСтр = НовыйДок.Товары.Добавить();
                ДокСтр.Номенклатура = Выборка.Номенклатура;
                ДокСтр.Количество = МИН(ОсталосьКоличество, Выборка.ВНаличииОстаток);
                ДокСтр.КоличествоУпаковок = ДокСтр.Количество;
                //ДокСтр.Цена = "0.01";  //цена строкой?
                ДокСтр.Цена = 0.01;
                ДокСтр.Сумма = ДокСтр.Количество*ДокСтр.Цена;
                ДокСтр.СтавкаНДС = Перечисления.СтавкиНДС.НДС18;
            КонецЕсли;
        КонецЦикла; 
        
        Попытка
            НовыйДок.ОбменДанными.Загрузка = Истина;
            НовыйДок.Записать(РежимЗаписиДокумента.Запись, РежимПроведенияДокумента.Неоперативный);
            Возврат НовыйДок.Ссылка;
        Исключение
            Попытка
                НовыйДок.ОбменДанными.Загрузка = Ложь;
                НовыйДок.Записать(РежимЗаписиДокумента.Запись, РежимПроведенияДокумента.Неоперативный);
                Возврат НовыйДок.Ссылка;
            Исключение
                Возврат Документы.ЗаказПоставщику.ПустаяСсылка();
            КонецПопытки;
        КонецПопытки;
    КонецЦикла;
КонецЦикла;
Ну и вы же понимаете, что ваша функция вернет вам ссылку только на последний созданный документ?) Хорошо, если везде будет одинаковый Склад, и документ действительно будет один. А если нет?
1
Татьянка22
1 / 0 / 0
Регистрация: 23.04.2014
Сообщений: 30
09.04.2017, 18:05  [ТС] 11
GreenkA, Большое спасибо!Я поняла,что Вы имеете ввиду. И код,на первый взгляд, тоже понятен. Я обязательно завтра попробую протестить. Еще раз огромное спасибо за помощь!

Добавлено через 6 минут
Цитата Сообщение от GreenkA Посмотреть сообщение
Ну и вы же понимаете, что ваша функция вернет вам ссылку только на последний созданный документ?)
конечно. Просто за неимением опыта,раскладываю задачу по частям. Но я научусь
0
GreenkA
Форумчанин
Эксперт 1С
2994 / 1920 / 520
Регистрация: 25.06.2009
Сообщений: 6,784
09.04.2017, 18:09 12
Цитата Сообщение от Татьянка22 Посмотреть сообщение
Но я научусь
Я и не сомневаюсь
Удачи вам!
0
09.04.2017, 18:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.04.2017, 18:09

Удалить область в табличном документе программно
Ребята, подскажите кто знает, делаю условие на вывод строк только с отрицательным итогом. Вот...

Как в документе Word программно вставить гиперссылку
object oBookMark = "MyBookmark"; oDoc.Bookmarks.Item(ref oBookMark).Range.Text = "http://site.ru";...

Как программно создать Url ссылку в документе
Как программно создать url ссылку в документе открытом в клиенте Lotus Notes. Подскажите как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru