Форум программистов, компьютерный форум, киберфорум
Наши страницы
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.82/45: Рейтинг темы: голосов - 45, средняя оценка - 4.82
deeller
38 / 38 / 4
Регистрация: 20.04.2011
Сообщений: 786
Записей в блоге: 1
1

Программно создать документ

25.11.2011, 13:52. Просмотров 8463. Ответов 37
Метки нет (Все метки)

доброго времени суток! пишу программу на делфи, которая будет работать с 1с. не могли бы вы помочь мне с кодом 1с который будет формировать документ списаниеТМЦ и для примера заполнение 1 реквизита шапки(остальные по примеру сам сделаю) и ТЧ.

Добавлено через 2 часа 40 минут
есть вот такой код:
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Процедура Сформировать()
Док=СоздатьОбъект("Документ.СписаниеТМЦ");
фирмы=СоздатьОбъект("Справочник.Фирмы");
склад=СоздатьОбъект("Справочник.Склады");
Прод=СоздатьОбъект("Справочник.Номенклатура");
Док.Новый();     
фирмы.НайтиПоКоду("00001");           
склад.НайтиПоКоду("00002"); 
Прод.НайтиПоКоду("2923095");
Док.фирма =фирмы.текущийэлемент();
Док.склад=склад.текущийэлемент(); 
Док.НоваяСтрока();
Док.Номенклатура=Прод.текущийэлемент(); 
Док.Количество=10;
Док.Записать();
КонецПроцедуры
а вот эта строка почему то не выполняется
1C
1
Док.Номенклатура=Прод.текущийэлемент();
в итоге формируется документ вноситься количество,а номеклатура в ТЧ не заносится, товар с таким кодом точно есть подскажите в чем дело?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.11.2011, 13:52
Ответы с готовыми решениями:

Закрыть документ программно в 1С 7.7
Здравствуйте! Вопрос: как программно закрыть открытый документ? 1С 7.7 Комплексная ред. 4.5...

Открыть программно созданный документ
Написал обработку по вводу платежек и выписки на основании доков на поступление ТМЦ. После записи...

Программно перезаписать существующий документ
Всем доброго времени суток. Такая проблема: нужно, чтобы в уже существующем документе производилась...

Программно указать документ-основание в восьмерке
Не подскажете? А то я не нашел в документации. Или может плохо искал?

Создать документ на основании справочника
Здравствуйте! Делаю базу столовой и мне нужно создать документ "Варка", в котором при указании...

37
mamedovvms
2920 / 841 / 324
Регистрация: 30.04.2009
Сообщений: 2,633
25.11.2011, 14:05 2
1.Номер точно текстовый????
2.Попробуйте сделать так
1C
1
2
3
Если Прод.НайтиПоКоду("2923095") = 0 Тогда
 Сообщить("Элемент не найден");
КонецЕсли;
Добавлено через 8 минут
К стати а что за конфигурация
0
deeller
38 / 38 / 4
Регистрация: 20.04.2011
Сообщений: 786
Записей в блоге: 1
25.11.2011, 14:08  [ТС] 3
ккс магазин
0
mamedovvms
2920 / 841 / 324
Регистрация: 30.04.2009
Сообщений: 2,633
25.11.2011, 14:09 4
Ну что попробовали сделать с сообщением
0
25.11.2011, 14:09
deeller
38 / 38 / 4
Регистрация: 20.04.2011
Сообщений: 786
Записей в блоге: 1
25.11.2011, 14:20  [ТС] 5
да попробовал и вправду пишет что код не найден, хотя тип текстовый и длина 8... попробую по наименованию поиск сделать

Добавлено через 2 минуты
но наименованию пишет тоже что не найден элемент в чем может быть касяк?

Добавлено через 5 минут
разобрался нужно было передавать еще режим поиска
0
duk337
2951 / 1763 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
25.11.2011, 14:20 6
Цитата Сообщение от deeller Посмотреть сообщение
есть вот такой код:
Код
Процедура Сформировать()
Док=СоздатьОбъект("Документ.СписаниеТМЦ");
фирмы=СоздатьОбъект("Справочник.Фирмы");
склад=СоздатьОбъект("Справочник.Склады");
Прод=СоздатьОбъект("Справочник.Номенклатура");
Док.Новый();     
фирмы.НайтиПоКоду("00001");           
склад.НайтиПоКоду("00002"); 
Прод.НайтиПоКоду("2923095");
Док.фирма =фирмы.текущийэлемент();
Док.склад=склад.текущийэлемент(); 
Док.НоваяСтрока();
Док.Номенклатура=Прод.текущийэлемент(); 
Док.Количество=10;
Док.Записать();
КонецПроцедуры
а вот эта строка почему то не выполняется
Код
Док.Номенклатура=Прод.текущийэлемент();
в итоге формируется документ вноситься количество,а номеклатура в ТЧ не заносится, товар с таким кодом точно есть подскажите в чем дело?
Странно. Всё правильно.
Переменная Прод дублирует идентификатор?
Прод.порядокКодов(); ?
а так?
Прод.НайтиПоКоду(2923095);
или тупо
Док.Номенклатура=Прод
- хотя явно не в этом дело, а не находит элемент или загоняет не в ту переменную.

В отладчик 1С лезть придётся?
1
deeller
38 / 38 / 4
Регистрация: 20.04.2011
Сообщений: 786
Записей в блоге: 1
25.11.2011, 14:31  [ТС] 7
заменил
на вот эту строку
Код
Прод.НайтиПоНаименованию("Баклажаны свеж.(сал.цех)",0)
теперьработает

Добавлено через 8 минут
а подскажите еще такой момент. при формировании документа списания из 1с при выборе номенклатуры в ТЧ выбирается еще и цена товара, во откуда она берется? как можно определить? или как сделать чтобы при программном формировании документа получалось тоже самое
0
duk337
2951 / 1763 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
25.11.2011, 14:37 8
Ивент при изменении ТЧ.Номенклатура. Что-то типа НайтиЦенуТовара(Номенклатура). надо глянуть, что изпользуется при вводе на основании - и сделать так же.
В объекте Док доступен модуль документа, проки с "Экспорт".

Добавлено через 1 минуту
В свойствах колонки формула
глПересчетТаблЧасти(Контекст,Форма.ТекущаяКолонка())

Добавлено через 24 секунды
Искать её в глобальном модуле
0
deeller
38 / 38 / 4
Регистрация: 20.04.2011
Сообщений: 786
Записей в блоге: 1
25.11.2011, 14:42  [ТС] 9
в модуле документа ничего найти не могу "цена" встречаеться только в комменте. а свойства колонки формула это где? чет в 7 не могу найти глобальный модуль
0
mamedovvms
2920 / 841 / 324
Регистрация: 30.04.2009
Сообщений: 2,633
25.11.2011, 14:53 10
Цена скорее всего это отдельный подчиненный справочник и реквизит цена в нем скорее всего периодический по этому нужно получить цену на дату, то есть
1C
1
2
3
Цена = СоздатьОбъект("Справочник.Цены");
Цена.ИспользоватьВладельца(Прод.ТекущийЭлемент());
Док.Цена = Цена.Цена.Получить(ТекущаяДата());
Вроде так
0
deeller
38 / 38 / 4
Регистрация: 20.04.2011
Сообщений: 786
Записей в блоге: 1
25.11.2011, 14:55  [ТС] 11
спасибо щас попробую, отпишусь
0
mamedovvms
2920 / 841 / 324
Регистрация: 30.04.2009
Сообщений: 2,633
25.11.2011, 14:56 12
Только я точно не помню как называется справочник толи Цена Толи Цены
1
deeller
38 / 38 / 4
Регистрация: 20.04.2011
Сообщений: 786
Записей в блоге: 1
25.11.2011, 16:17  [ТС] 13
Вот такой код наваял, но цену все равно не вытаскивает.
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Процедура Сформировать()
Док=СоздатьОбъект("Документ.СписаниеТМЦ");
фирмы=СоздатьОбъект("Справочник.Фирмы");
склад=СоздатьОбъект("Справочник.Склады");
Прод=СоздатьОбъект("Справочник.Номенклатура"); 
Цена=СоздатьОбъект("Справочник.Цены"); 
Прод.НайтиПоНаименованию("Баклажаны свеж.(сал.цех)",0);
Цена.ИспользоватьВладельца(Прод.ТекущийЭлемент());
Док.Новый();     
фирмы.НайтиПоКоду("00001");           
склад.НайтиПоКоду("00002"); 
Док.фирма =фирмы.текущийэлемент();
Док.склад=склад.текущийэлемент(); 
Док.НоваяСтрока();
Док.Номенклатура=Прод.текущийэлемент(); 
Док.Количество=10;  
Док.Цена=Цена.Цена.Получить(ТекущаяДата());
Док.Записать();
КонецПроцедуры
смотрел справочник "цены" чето там о номеклатуре ни слова нету...
0
duk337
2951 / 1763 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
25.11.2011, 16:33 14
Цитата Сообщение от deeller Посмотреть сообщение
в модуле документа ничего найти не могу "цена" встречаеться только в комменте. а свойства колонки формула это где? чет в 7 не могу найти глобальный модуль
Проще взять так, как оно написано. Глобальник найти на рис.
Цена.ИспользоватьВладельца надо по каждой номенклатурине
0
Миниатюры
Программно создать документ   Программно создать документ  
deeller
38 / 38 / 4
Регистрация: 20.04.2011
Сообщений: 786
Записей в блоге: 1
25.11.2011, 16:43  [ТС] 15
уже нашел функцию в глобальном модуле, вроде бы она, но в нее передается чтото многовато параметров... и если честно не сильно представляю как из делфи вызвать функцию глобального модуля
0
duk337
2951 / 1763 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
25.11.2011, 16:48 16
Цитата Сообщение от deeller Посмотреть сообщение
уже нашел функцию в глобальном модуле, вроде бы она, но в нее передается чтото многовато параметров... и если честно не сильно представляю как из делфи вызвать функцию глобального модуля
Она должна быть видима в аппликейшене. Прямо так и вызывай. Можно взять часть из неё, касающуюся цены. Уж разберёшься поди. А параметров много, потому что она во всех доках используется. Вместо "Контекст" можно отправлять "Док", колонка = "Номенклатура" ну и т.д.
опять же проще написать проку в 1С в глобальнике с директивой "Экспорт" и вызвать Апп1С.ПрокаМояПрока() Ты ведь через ОЛЕ юзаешь базу?
0
deeller
38 / 38 / 4
Регистрация: 20.04.2011
Сообщений: 786
Записей в блоге: 1
25.11.2011, 16:54  [ТС] 17
1C
1
2
3
4
5
6
Цена.ИспользоватьВладельца(Прод.ТекущийЭлемент()); 
Цена.ВыбратьЭлементы();               
Пока цена.ПолучитьЭлемент()  = 1 Цикл    
    ценаН=цена.ТекущийЭлемент();
    сообщить (ЦенаН.цена.Получить(ТекущаяДата()));
КонецЦикла;
выводит 2 раза одну и туже сумму ну почему одну и ту же понятно а 2 раза потому что цена менялась 2 раза на эту позицию?
0
duk337
2951 / 1763 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
25.11.2011, 16:57 18
Цитата Сообщение от deeller Посмотреть сообщение
Код
Цена.ИспользоватьВладельца(Прод.ТекущийЭлемент()); 
Цена.ВыбратьЭлементы();               
Пока цена.ПолучитьЭлемент()  = 1 Цикл    
    ценаН=цена.ТекущийЭлемент();
	сообщить (ЦенаН.цена.Получить(ТекущаяДата()));
КонецЦикла;
выводит 2 раза одну и туже сумму ну почему одну и ту же понятно а 2 раза потому что цена менялась 2 раза на эту позицию?
Нет. Там, наверное, по типам цен ещё. А дата одна ведь
0
deeller
38 / 38 / 4
Регистрация: 20.04.2011
Сообщений: 786
Записей в блоге: 1
28.11.2011, 09:36  [ТС] 19
встал в тупик с последним полем документа - коэффициент, нашел его в справочнике единицы. думал получиться вытащить его как цену:
1C
1
2
3
4
5
коэфф=СоздатьОбъект("Справочник.Единицы");
коэфф.ИспользоватьВладельца(Прод.ТекущийЭлемент()); 
коэфф.ВыбратьЭлементы();  
коэффН=коэфф.ТекущийЭлемент();
сообщить(КоэффН.Коэффициент.Получить(ТекущаяДата());
но выводит 0, не правильно делаю или не оттуда вытаскиваю?
0
duk337
2951 / 1763 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
28.11.2011, 10:36 20
Цитата Сообщение от deeller Посмотреть сообщение
встал в тупик с последним полем документа - коэффициент, нашел его в справочнике единицы. думал получиться вытащить его как цену:
Код
коэфф=СоздатьОбъект("Справочник.Единицы");
коэфф.ИспользоватьВладельца(Прод.ТекущийЭлемент()); 
коэфф.ВыбратьЭлементы();  
коэффН=коэфф.ТекущийЭлемент();
сообщить(КоэффН.Коэффициент.Получить(ТекущаяДата());
но выводит 0, не правильно делаю или не оттуда вытаскиваю?
Не парься. Коэфф - это перевод из единицы в единицу, и имеет смысл, когда ЕИ в доке отличается от ЕИ хранения остатков. Ставь 1.
1
28.11.2011, 10:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.11.2011, 10:36

Создать документ с проверкой на дубликаты
Добрый день. Нужно создать документ "ДобавитьДолжность". Добавляется в справочник "Должности". С...

Создать и открыть документ програмно
Пишу следующее Док = СоздатьОбъект("Документ.Такой-то"); Док.Новый(); //Здесь нужно его открыть...

Создать программно СКД
Всем привет. ЗиК 8.2 Нужно программно создать отчет в СКД. Текст моего запроса ВЫБРАТЬ...


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

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

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