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

Внешняя обработка, создание документа Заказ Поставщику

12.08.2015, 10:38. Просмотров 3268. Ответов 18
Метки нет (Все метки)

Здравствуйте, подскажите, пожалуйста! Во внешней обработке создаю Заказ поставщику на основании Заказа клиента. При этом табличную часть Заказа поставщику заполняю основными вариантами комплектации товаров, которые содержаться в Заказе клиенту. На данный момент 2 проблемы.
1. Табличная часть заполняется без ошибок, но при попытке провести созданный документ говорит, что "Обнаружено нулевое количество при пересчете в единицу хранения в строке n списка "Товары" и так по каждой строке... Само поле Кол-во (которое на самом деле КоличествоУпаковок заполнено).
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
Для каждого СтрокаТЧ из Основание.Товары Цикл 
        
    ЗапросВариантаКомплектации = Новый Запрос();
    ЗапросВариантаКомплектации.Текст =
    "ВЫБРАТЬ
    |    ВариантыКомплектацииНоменклатуры.Номенклатура.Ссылка КАК Номенклатура,
    |   ВариантыКомплектацииНоменклатуры.Количество КАК Количество,
    |   ВариантыКомплектацииНоменклатуры.Упаковка КАК Упаковка,
    |   ВариантыКомплектацииНоменклатуры.КоличествоУпаковок КАК КоличествоУпаковок
    |
    |ИЗ
    |    Справочник.ВариантыКомплектацииНоменклатуры.Товары КАК ВариантыКомплектацииНоменклатуры
    |ГДЕ
    |    ВариантыКомплектацииНоменклатуры.Ссылка.Владелец = &Ссылка
    |   И ВариантыКомплектацииНоменклатуры.Ссылка.Основной
    |УПОРЯДОЧИТЬ ПО
    |    ВариантыКомплектацииНоменклатуры.НомерСтроки";
    
    ЗапросВариантаКомплектации.УстановитьПараметр("Ссылка", СтрокаТЧ.Номенклатура);
    Выборка = ЗапросВариантаКомплектации.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл 
    
        НоваяСтрока = НовыйОбъект.Товары.Добавить();
        НоваяСтрока.Номенклатура = Выборка.Номенклатура;
        НоваяСтрока.КоличествоУпаковок = Выборка.Количество * СтрокаТЧ.Количество;
        НоваяСтрока.Количество = Выборка.Количество * СтрокаТЧ.Количество;
        НоваяСтрока.Упаковка = Выборка.Упаковка;
    
    КонецЦикла;
        
КонецЦикла;
Причем ошибка уходит если руками перевыбрать позицию номенклатуры или количество.

2. Пытаюсь указать ссылку на документ основание таким способом

1C
1
2
3
4
5
6
7
8
9
10
Процедура СоздатьНовыйДокумент(Элемент, НовыйОбъект)
    
    Основание = Элемент.Ссылка;
    
    НовыйОбъект.Дата = ТекущаяДата();
    НовыйОбъект.Организация = Основание.Организация;
    НовыйОбъект.Склад = "";
    НовыйОбъект.ДокументОснование = Основание;\
    ...
КонецПроцедуры
но ничего не заполняется...

Буду очень благодарна за советы!
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.08.2015, 10:38
Ответы с готовыми решениями:

Внешняя обработка заполнения документа "Заказ покупателя"
Всем опять здравствуйте! Я опять вернулась к этой проблеме, потому что она так и не решилась. ...

Внешняя обработка для создания документа
Нужно создать внешнюю обработку для созданию общего заказа поставщику из остальных заказов с...

Внешняя обработка, создание формы
Всем доброго времени суток. Народ, подскажите, пишу с нуля внешнюю обработку для загрузки данных в...

Загрузка данных из табличного документа и заказ поставщику
Добрый день. Подскажите возможно ли в обработке "универсальная загрузка данных в табличный...

Печатную форму документа "Заказ поставщику" нужно сохранить в Excel
Подскажите пожалуйста когда делаешь заказ поставщику как сохранить его в Excel??? Там в функциях...

18
SHIFT_969
Злой самаритянин
178 / 179 / 94
Регистрация: 24.04.2014
Сообщений: 686
Завершенные тесты: 1
12.08.2015, 12:20 2
Цитата Сообщение от golovinaea Посмотреть сообщение
ЗапросВариантаКомплектации.УстановитьПараметр("Ссылка", СтрокаТЧ.Номенклатура);
У тебя владелец документа - номенклатура?
Этот запрос вообще выбирает что-то?
Цитата Сообщение от golovinaea Посмотреть сообщение
2. Пытаюсь указать ссылку на документ основание таким способом, но ничего не заполняется...
Что в параметре Элемент? Активней отладкой пользуйся.
0
golovinaea
0 / 0 / 0
Регистрация: 12.08.2015
Сообщений: 10
12.08.2015, 12:29  [ТС] 3
Цитата Сообщение от SHIFT_969 Посмотреть сообщение
У тебя владелец документа - номенклатура?
Да, владелец справочника ВариантыКомплектацииНоменклатуры, по которому я делаю запрос, Справочник Номенклатура.
Цитата Сообщение от SHIFT_969 Посмотреть сообщение
Этот запрос вообще выбирает что-то?
Этот запрос выбирает ровно то, что нужно!
Цитата Сообщение от SHIFT_969 Посмотреть сообщение
Что в параметре Элемент? Активней отладкой пользуйся.
У меня не работают точки останова. Это Элемент массива ОбъектыНазначенияМассив
0
SHIFT_969
Злой самаритянин
178 / 179 / 94
Регистрация: 24.04.2014
Сообщений: 686
Завершенные тесты: 1
12.08.2015, 13:15 4
Чтобы точки останова работали, добавь основную форму, где выбирается ссылка на документ и вызывается процедура печати. Открывай через файл - открыть.

Цитата Сообщение от golovinaea Посмотреть сообщение
"Обнаружено нулевое количество при пересчете в единицу хранения в строке n списка "Товары"
В каких условиях возникает это сообщение? Подозреваю, что значение НоваяСтрока.Количество делится на НоваяСтрока.КоличествоУпаковок и получается не то, потому, что они равны...

1C
1
2
НоваяСтрока.КоличествоУпаковок = СтрокаТЧ.Количество;
НоваяСтрока.Количество = Выборка.Количество * СтрокаТЧ.Количество;
0
golovinaea
0 / 0 / 0
Регистрация: 12.08.2015
Сообщений: 10
12.08.2015, 15:09  [ТС] 5
При таком заполнении строки:
1C
1
2
3
4
5
    НоваяСтрока = НовыйОбъект.Товары.Добавить();
    НоваяСтрока.Номенклатура = Выборка.Номенклатура;
    НоваяСтрока.КоличествоУпаковок = Выборка.КоличествоУпаковок * СтрокаТЧ.Количество;
    НоваяСтрока.Количество = Выборка.Количество * СтрокаТЧ.Количество;
    НоваяСтрока.Упаковка = Выборка.Упаковка;
ошибка не уходит. Вообще сообщение возникает при попытке провести созданный документ.

Добавлено через 53 минуты
Так, вероятно что-то не то творит код
Код
	ТЗ = Новый ТаблицаЗначений;
		ТЗ = НовыйОбъект.Товары.Выгрузить();
		ТЗ.Свернуть("Номенклатура", "КоличествоУпаковок");
		НовыйОбъект.Товары.Загрузить(ТЗ);
Если закомментировать, то ошибка уходит. Я наверное неверно использую Свернуть()

Добавлено через 12 минут
Да, действительно. Поправила на
Код
ТЗ.Свернуть("Номенклатура, Упаковка", "КоличествоУпаковок, Количество");
Осталось разобраться с документом основанием.
0
SHIFT_969
Злой самаритянин
178 / 179 / 94
Регистрация: 24.04.2014
Сообщений: 686
Завершенные тесты: 1
12.08.2015, 15:58 6
Может, в Элемент.Ссылка и в НовыйОбъект.ДокументОснование разные типы?
0
golovinaea
0 / 0 / 0
Регистрация: 12.08.2015
Сообщений: 10
12.08.2015, 16:46  [ТС] 7
Я вот тоже про это думала.
Тип ДокументОснование - ДокументСсылка.ЗаказКлиента
а элемент - это ЗаказКлиента. В процессе выполнения Элемент.Ссылка принимает значение "Заказ клиента ОМТ-00001 от 07.08.2015 12:40:48" вроде бы все норм... это же значение имеет и ДокументОснование после строки присваивания.
Поэтому я в тупике.
0
SHIFT_969
Злой самаритянин
178 / 179 / 94
Регистрация: 24.04.2014
Сообщений: 686
Завершенные тесты: 1
12.08.2015, 17:17 8
Целиком процедуру скинь.
0
golovinaea
0 / 0 / 0
Регистрация: 12.08.2015
Сообщений: 10
12.08.2015, 17:22  [ТС] 9
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
&НаСервере
Процедура СоздатьНовыйДокумент(Элемент, НовыйОбъект)
    
    Основание = Элемент.Ссылка;
    Сообщить(Основание);
    НовыйОбъект.Дата = ТекущаяДата();
    НовыйОбъект.Организация = Основание.Организация;
    НовыйОбъект.Склад = "";
    НовыйОбъект.ДокументОснование = Основание;
    //но не отображается на форме, косяк)
    
    //ДанныеОснования = ПолучитьДанныеОснованияНаСервере(НовыйОбъект.ДокументОснование);
    //ЗаполнитьЗначенияСвойств(НовыйОбъект, ДанныеОснования);   
    
    Для каждого СтрокаТЧ из Основание.Товары Цикл 
        
        ЗапросВариантаКомплектации = Новый Запрос();
        ЗапросВариантаКомплектации.Текст =
        "ВЫБРАТЬ
        |   ВариантыКомплектацииНоменклатуры.Номенклатура.Ссылка КАК Номенклатура,
        |   ВариантыКомплектацииНоменклатуры.Количество КАК Количество,
        |   ВариантыКомплектацииНоменклатуры.Упаковка КАК Упаковка,
        |   ВариантыКомплектацииНоменклатуры.КоличествоУпаковок КАК КоличествоУпаковок
        |
        |ИЗ
        |   Справочник.ВариантыКомплектацииНоменклатуры.Товары КАК ВариантыКомплектацииНоменклатуры
        |ГДЕ
        |   ВариантыКомплектацииНоменклатуры.Ссылка.Владелец = &Ссылка
        |   И ВариантыКомплектацииНоменклатуры.Ссылка.Основной
        |УПОРЯДОЧИТЬ ПО
        |   ВариантыКомплектацииНоменклатуры.НомерСтроки";
        
        ЗапросВариантаКомплектации.УстановитьПараметр("Ссылка", СтрокаТЧ.Номенклатура);
        Выборка = ЗапросВариантаКомплектации.Выполнить().Выбрать();
        Пока Выборка.Следующий() Цикл 
        
            НоваяСтрока = НовыйОбъект.Товары.Добавить();
            НоваяСтрока.Номенклатура = Выборка.Номенклатура;
            НоваяСтрока.КоличествоУпаковок = Выборка.КоличествоУпаковок * СтрокаТЧ.Количество;
            НоваяСтрока.Количество = Выборка.Количество * СтрокаТЧ.Количество;
            НоваяСтрока.Упаковка = Выборка.Упаковка;
                    
        КонецЦикла;
        
    КонецЦикла;
    
    // сворачивает строки с одинаковыми товарами и суммируем количество
    ТЗ = Новый ТаблицаЗначений;
        ТЗ = НовыйОбъект.Товары.Выгрузить();
        ТЗ.Свернуть("Номенклатура, Упаковка", "КоличествоУпаковок, Количество");
        НовыйОбъект.Товары.Загрузить(ТЗ);
    
КонецПроцедуры
0
SHIFT_969
Злой самаритянин
178 / 179 / 94
Регистрация: 24.04.2014
Сообщений: 686
Завершенные тесты: 1
13.08.2015, 10:51 10
golovinaea, а что еще происходит с НовыйОбъект вне этой процедуры?
0
golovinaea
0 / 0 / 0
Регистрация: 12.08.2015
Сообщений: 10
13.08.2015, 11:23  [ТС] 11
Ну мы вызываем эту процедуру
1C
1
СоздатьНовыйДокумент(Элемент, ДанныеФормы)
далее
1C
1
КопироватьДанныеФормы(ДанныеФормы, ФормаДок.Объект);
и открываем форму
1C
1
ФормаДок.Открыть();
всё
0
SHIFT_969
Злой самаритянин
178 / 179 / 94
Регистрация: 24.04.2014
Сообщений: 686
Завершенные тесты: 1
13.08.2015, 12:00 12
golovinaea, Все потому, что работать нужно с самим объектом: Получить или создать объект (так и не понял что ты там делаешь), установить значения и провести документ. Потом только получать форму и открывать ее. И никаких ДанныхФормы. Сейчас пример скину.

Добавлено через 7 минут
1C
1
2
3
4
5
6
7
8
9
ДокОбъект = Документы.ИмяДокумента.СоздатьДокумент();
ДокОбъект = Ссылка.ПолучитьОбъект();
// оба варианта возвращают тип ДокументОбъект, работаем с ним.
// заполняем значения.
// потом:
НовДок.Записать(РежимЗаписиДокумента.Проведение);
// и открываем форму:
ФормаДокумента = ПолучитьФорму("Документ.ИмяДокумента.ФормаОбъекта", Новый Структура("Ключ", НовДок.Ссылка));
ФормаДокумента.Открыть();
0
golovinaea
0 / 0 / 0
Регистрация: 12.08.2015
Сообщений: 10
13.08.2015, 14:30  [ТС] 13
Я делала так:
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
    //Переберем все выбранные документы на основании, которых будет созданы другие новые документы
    //В нашем случае это всего один документ "ЗаказКли"
    Для Каждого Элемент из ОбъектыНазначенияМассив Цикл 
        
         //Получая форму объекта создаваемого документа, мы уже создаем этот объект
        ФормаДок = ПолучитьФорму("Документ.ЗаказПоставщику.ФормаОбъекта");
 
        //Далее мы получаем объект только, что созданной формы и помещаем её в переменную
        //В объекте содержатся все реквизиты (элементы) формы
        ДанныеФормы = ФормаДок.Объект;
 
        //Мы помещаем объект формы в переменную,
        //так как должны передать её в процедуру на сервере,
        //где нельзя изменять объект формы, зато можно править переменную содержащую его
        СоздатьНовыйДокумент(Элемент, ДанныеФормы);
 
        //После выполнения процедуры на сервере мы получаем изменную переменную ДанныеФормы,
        //которую необходимо передать в уже созданную нами форму
        КопироватьДанныеФормы(ДанныеФормы, ФормаДок.Объект);
 
        //Открываем результат выполнения обработки
        ФормаДок.Открыть();
        
    КонецЦикла;
Добавлено через 2 часа 0 минут
Я вывела типы значений Основание и НовыйОбъект.ДокументОснование
Они одинаковые. Может быть проблема в том, что в создаваемом документе и документе основании разные строки?
0
SHIFT_969
Злой самаритянин
178 / 179 / 94
Регистрация: 24.04.2014
Сообщений: 686
Завершенные тесты: 1
13.08.2015, 14:41 14
Какая конфигурация?
0
golovinaea
0 / 0 / 0
Регистрация: 12.08.2015
Сообщений: 10
13.08.2015, 14:46  [ТС] 15
УТ 11.0.9
0
SHIFT_969
Злой самаритянин
178 / 179 / 94
Регистрация: 24.04.2014
Сообщений: 686
Завершенные тесты: 1
13.08.2015, 15:54 16
И тут пусто? Вроде бы у тебя все правильно, и значение нигде не очищается... А почему через обработку, а не подпиской на событие?
0
Миниатюры
Внешняя обработка, создание документа Заказ Поставщику  
golovinaea
0 / 0 / 0
Регистрация: 12.08.2015
Сообщений: 10
13.08.2015, 17:28  [ТС] 17
Ничего! Вообще ГруппаОснование на форме не видно.... Я уже с ума схожу....
Сделать через обработку - это требование(((

Добавлено через 44 секунды
Ну там когда руками создаешь документ тоже этого блока не видно.... вот такая же ситуация.
0
SHIFT_969
Злой самаритянин
178 / 179 / 94
Регистрация: 24.04.2014
Сообщений: 686
Завершенные тесты: 1
13.08.2015, 18:19 18
Лучший ответ Сообщение было отмечено golovinaea как решение

Решение

golovinaea, смотри, в процедуре ПриСозданииНаСервере есть строчка
1C
1
ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ГруппаОснование", "Видимость", ЗначениеЗаполнено(Объект.ДокументОснование));
Там, если заполнено значение Объект.ДокументОснование, то группа делается невидимой, очень странно, попробуй убрать эту строку. Если нельзя, то проробуй выводить структуру подчиненности документа. Если все выводится правильно, то используй структуру как доказательство.
0
golovinaea
0 / 0 / 0
Регистрация: 12.08.2015
Сообщений: 10
14.08.2015, 08:30  [ТС] 19
SHIFT_969, оооо, спасибо! Судя по структуре подчиненности все заполняется верно!
0
14.08.2015, 08:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.08.2015, 08:30

Внешняя обработка, не получается загрузить данные в табличную часть документа
Здравствуйте!

обработка:заполнение реквизита документа реквизитом другого документа
делаю обработку.В документе ПТУ в ТЧ товары есть Заказы, но в ТЧ товары нету Проекта, поэтому на...

Внешняя Обработка
добрый день! Очень нужна помощь.В 1с8.2 есть справочник контрагенты.Необходимо в наименовании...


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

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

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