Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
25 Июн 2018, 22:27
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Обработка создания и заполнения  (Прочитано 6126 раз)

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

Оффлайн funbl4

  • *
  • Сообщений: 7
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2010-08-31
  • Сайт: 
Здравствуйте. Передо мной стоит такая задача: нужно создать обработку, которая программно заполняла бы в документе Расходная накладная 5 субконто (Договор, контрагент, отгрузка - ссылка на саму расходную накладную, заказы, номер заказа). При этом в расходной накладной должно заполнятся около 10 строк (товар, количество и сумма). Так же нужно с помощью обработки программно создавать контрагентов (контрагент1, контрагент2,..., договор(n)), договора (договор1, договор2,...,договор(n)) и сам товар (товар1, товар2,... ,товар(n)). При этом при всём нужно раскидать документы в течении года.
Честно говоря когда мне сказали задание у меня глаза на лоб закатились О_о

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

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


Оффлайн Vit1501

  • ****
  • Сообщений: 360
  • РЕПУТАЦИЯ: 60
  • КПД: 17%
  • Регистрация: 2010-06-05
  • Сайт: 
  • Профессия: Программист 1С
Почему бы в одном цикле этого не сделать? Например:
Пока .... Цикл
НовыйДок = Документы.РасходнаяНакладная.СоздатьДокумент();
НовыйКонтр = СоздатьКонтрагента();
НовыйДок.Контрагент = НовыйКонтр;
НовыйДок.Записать();
КонецЦикла;

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

Оффлайн funbl4

  • *
  • Сообщений: 7
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2010-08-31
  • Сайт: 
ну, например, у контрагента есть же реквизиты типа имени, адреса, УНН и т.д.  и нужно чтобы они были разные хотя бы отличались числом или буквой (Контрагент1, контрагент2). А через 1 цикл всё это не сделаешь.
Сразу создаются Контрагенты с реквизитами
потом товары
так же нужно создать договора
а потом уже заполнить расходную накладную.
Тут одним циклом не отделаться :)

Оффлайн Klyacksa

  • Фрилансер. Милости прошу с задачами в личку.
  • Глобальный модератор
  • *****
  • Сообщений: 1325
  • РЕПУТАЦИЯ: 430
  • КПД: 32%
  • Регистрация: 2010-08-20
  • Сайт: 
  • Профессия: Программист 1С
Поддерживаю товарища Vit1501 - не надо усложнять себе жизнь, какие 5 циклов?

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

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

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

Оффлайн funbl4

  • *
  • Сообщений: 7
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2010-08-31
  • Сайт: 
Получилась вот такая вот штука:

ГСЧ = Новый ГенераторСлучайныхЧисел();
Для НомерДок = 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

  • Фрилансер. Милости прошу с задачами в личку.
  • Глобальный модератор
  • *****
  • Сообщений: 1325
  • РЕПУТАЦИЯ: 430
  • КПД: 32%
  • Регистрация: 2010-08-20
  • Сайт: 
  • Профессия: Программист 1С
Ну вот видишь, и никаких 5 циклов :)
Правда, мне не очень понятен смысл этой задачи. Просто забить базу данными?
И вот это как-то печально: Справочники.Валюты.НайтиПоНаименованию(Неопределено).
И почему товар везде один и тот же?

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

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

Оффлайн funbl4

  • *
  • Сообщений: 7
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2010-08-31
  • Сайт: 
Ага, задача была забить базу документами :)
А товар везде один и тот же, потому что я не смог выбрать :( Вот и получилось что задал постоянный)


Теги:
 


* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

AIFrame AIFrame
126 Сообщений
Геннадий ОбьГЭС Геннадий ОбьГЭС
118 Сообщений
alexandr_ll
65 Сообщений
pavl_vs
40 Сообщений
alex0402
28 Сообщений
buketov.av buketov.av
24 Сообщений
magnifico61
21 Сообщений
wise wise
16 Сообщений
ilyay ilyay
15 Сообщений
mixei
14 Сообщений

* Кто онлайн

  • Точка Гостей: 284
  • Точка Скрытых: 0
  • Точка Пользователей: 14
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal