Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 21:15

Обработка создания и заполнения

Автор funbl4, 31 авг 2010, 10:42

0 Пользователей и 2 гостей просматривают эту тему.

funbl4

Здравствуйте. Передо мной стоит такая задача: нужно создать обработку, которая программно заполняла бы в документе Расходная накладная 5 субконто (Договор, контрагент, отгрузка - ссылка на саму расходную накладную, заказы, номер заказа). При этом в расходной накладной должно заполнятся около 10 строк (товар, количество и сумма). Так же нужно с помощью обработки программно создавать контрагентов (контрагент1, контрагент2,..., договор(n)), договора (договор1, договор2,...,договор(n)) и сам товар (товар1, товар2,... ,товар(n)). При этом при всём нужно раскидать документы в течении года.
Честно говоря когда мне сказали задание у меня глаза на лоб закатились О_о

Как я понимаю для того чтобы это всё работало нужно делать через цикл причём не один.
Один цикл на заполнение самой расходной накладной.
Второй на создание контрагентов.
Третий на создание договор.
Четвёртый на создание товаров.
Пятый на заполнение строк с товарами в расходной накладной.
шестой на распределение документов в течении года.

Платформа 1С Предприятие 8.2

Vit1501

Почему бы в одном цикле этого не сделать? Например:
Пока .... Цикл
НовыйДок = Документы.РасходнаяНакладная.СоздатьДокумент();
НовыйКонтр = СоздатьКонтрагента();
НовыйДок.Контрагент = НовыйКонтр;
НовыйДок.Записать();
КонецЦикла;

и написать отдельно процедуру создатьконтрагента()

funbl4

ну, например, у контрагента есть же реквизиты типа имени, адреса, УНН и т.д.  и нужно чтобы они были разные хотя бы отличались числом или буквой (Контрагент1, контрагент2). А через 1 цикл всё это не сделаешь.
Сразу создаются Контрагенты с реквизитами
потом товары
так же нужно создать договора
а потом уже заполнить расходную накладную.
Тут одним циклом не отделаться :)

Klyacksa

Поддерживаю товарища Vit1501 - не надо усложнять себе жизнь, какие 5 циклов?

Пока ... цикл
   Док=Документы.РасходнаяНакладная.СоздатьДокумент();
   Контрагент=ПодобратьКонтрагента(ПараметрыКонтрагента);
   Договор=ПодобратьДоговор(Организация, Контрагент);
   Док.Контрагент=Контрагент;
   Док.Договор=Договор;
   тчТовары=Док.Товары;
   Пока ... цикл
          Товар=ПодобратьТовар(ПараметрыТовара);
          ТекТовар=тчТовары.Добавить();
          ТекТовар.Номенклатура=Товар;
          // тут можно остальные данные по строке тч заполнить
   конеццикла;
конеццикла;

ну и соответственно, сделать функции, возвращающие ссылку на элемент соответствующего справочника:
1.ПодобратьКонтрагента(ПараметрыКонтрагента); - если по ПараметрамКонтрагента нет существующего Контрагента, то создаем нового, иначе возвращаем ссылку на найденного
2.ПодобратьДоговор(Организация, Контрагент); - если по данной организации и Контрагенту (можно еще какие-нить признаки передавать, зависит от вашей специфики договоров) не нашли существующего договора - создаем новый, иначе возвращаем ссылку на найденный
3.ПодобратьТовар(ПараметрыТовара); - если нет товара с таким-то наименованием, таким-то артикулом - то создаем новый, иначе возвращаем ссылку на найденный

Ну а "распределение документов в течении года" - можно и после всего этого сделать, предварительно складывая ссылки на созданные документы в массив. Или сразу в том же цикле дату документа проставлять сразу, по нужным вам принципам "раскидывания документов в течение года" :)
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

funbl4

Получилась вот такая вот штука:

ГСЧ = Новый ГенераторСлучайныхЧисел();
Для НомерДок = 1 По 5000 Цикл  //количество документов
Конт = Справочники.Контрагенты.СоздатьЭлемент();
Конт.Наименование = "Контрагент" + ГСЧ.СлучайноеЧисло(10000);
Конт.УНП = ГСЧ.СлучайноеЧисло(100000000,999999999);
Конт.Страна = Справочники.Страны.НайтиПоНаименованию("РБ");
Конт.Записать();
Дог = Справочники.Договоры.СоздатьЭлемент();
Дог.НомерДоговора = ГСЧ.СлучайноеЧисло(0,5000);
Дог.Наименование = "Договор" + Строка(НомерДок);
Дог.Владелец = Конт.Ссылка;
Дог.ВидДоговора = Перечисления.ВидыДоговоров.Годовой;
Дог.ВалютаДоговора = Справочники.Валюты.НайтиПоНаименованию("RUB");
Дог.СуммаПоДоговору = ГСЧ.СлучайноеЧисло(0,50000000);
//Дог.ДатаДоговора = Дата(2009,1,1)+ГСЧ.СлучайноеЧисло(0, 60*60*24*355);
Дог.Записать();
Зак = Документы.Заказ.СоздатьДокумент();
Зак.ДиапазонНомеров = ГСЧ.СлучайноеЧисло(0,9000);
Зак.Дата = Дата(2009,1,1)+ГСЧ.СлучайноеЧисло(0, 60*60*24*355);
Зак.Записать();
НовДок = Документы.РасходнаяНакладная.СоздатьДокумент();
НовДок.Грузоотправитель = Конт.Ссылка;
НовДок.Грузополучатель = Конт.Ссылка;
НовДок.ВидОтгрузки = Перечисления.ВидыОтгрузок.ОтгрузкаПродукции;
НовДок.Валюта = Справочники.Валюты.НайтиПоНаименованию(Неопределено);
НовДок.Договор = Дог.Ссылка;
НовДок.Дата = Дата(2010,1,1)+ГСЧ.СлучайноеЧисло(0, 60*60*24*355);
Для НомерСтроки = 1 по 10 цикл //количество строк в документе
НовСтр = НовДок.ТЧ.Добавить();
НовСтр.НомерЗаказа = НомерСтроки+ГСЧ.СлучайноеЧисло(0,1000);
НовСтр.Товар = Справочники.Номенклатура.НайтиПоНаименованию("Товар");
НовСтр.ДокЗаказ =  Зак.Ссылка;
НовСтр.Количество = ГСЧ.СлучайноеЧисло(0,5000);
НовСтр.Цена = ГСЧ.СлучайноеЧисло(0,60000);
НовСтр.Сумма = НовСтр.Цена*НовСтр.Количество;
НовСтр.СтавкаНДС = "20%";
НовСтр.СуммаНДС = НовСтр.Сумма*0.2;
НовСтр.СуммаВсего = НовСтр.Сумма-НовСтр.СуммаНДС;
КонецЦикла;
//НовДок.Записать();
НовДок.Записать(РежимЗаписиДокумента.Проведение,РежимПроведенияДокумента.Неоперативный);
КонецЦикла;

Klyacksa

Ну вот видишь, и никаких 5 циклов :)
Правда, мне не очень понятен смысл этой задачи. Просто забить базу данными?
И вот это как-то печально: Справочники.Валюты.НайтиПоНаименованию(Неопределено).
И почему товар везде один и тот же?

Раз уж Валюта и Товар один и тот же везде - лучше их вынести в отдельные переменные перед циклами. А то получается, ты каждую итерацию шаришься по справочникам в поисках одних и тех же элементов.
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

funbl4

Ага, задача была забить базу документами :)
А товар везде один и тот же, потому что я не смог выбрать :( Вот и получилось что задал постоянный)

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск