• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

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

  • Автор темы funby
  • Дата начала
F

funby

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

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

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

Я на правильном пути? Я новенький в этом деле, до этого программированием не занимался. :)
 
G

Guest

funby
Я так понимаю идет загрузка из некоего файла? Строение файла нужно бы. Еще не понятно что значит "раскидать документы в течении года"?

Если у тебя есть информация о документах и строках отдельно, то циклов должно быть намного меньше:
1. Обход массива документов
1.1. Создание документа
1.2. Если контрагента еще нет, то создать
1.3. Если договора у контрагента нет, то создать
2. Обход строка документа
2.1. Добавление строки
2.2. Если номенклатуры еще нет, то создать.

Итого получается 2 цикла, остальное условия. Заранее определись по каким полям искать номенклатуру, контрагента, договор- или они всегда новые?
 
F

funby

Найлло, никого файла нету. Нужно сделать обработку.
В этой обработке нужно:
1) программное создание контрагентов (n-ое количество)
2) программное создание товаров (номенклатуры, n-ое количество)
3) программное создание договоров (n-ое количество)
4) после этого нужно программно заполнить этими данными расходную накладную,
1.1) в самой накладной есть 5 субконто:
а)договор
б)контрагент
в)отгрузка - ссылка на саму расходную накладную
г)заказы
д)номер заказа)
1.2) также присутствует табличная часть, в которой нужно заполнить около 10 строк в каждой расходной накладной и реквизиты(основные):
а) товар(номенклатура)
б) количество
в) сумма
5) раскидать в течении года - задать расходным накладным даты проведения в течении года
6) ну и соответственно накладные должны быть проведены
 
G

Guest

funby
Вы данные для создание контрагентов и прочего откуда берете?
В накладной нет субконто, там есть реквизиты.
Даты для "раскидывания" опять же непонятно откуда брать.
 
F

funby

Найлло Данные для создание контрагентов и всего прочего задаются тестовые, типа:
ПолноеНаименование - Фирма1
Адрес - адрес1
и т.д.
Тоже самое и с номенклатурой и договорами. Какие данные будут представлены неважно. Суть самой задачи в том чтобы забить данными саму базу, и посмотреть тормозит ли сервер. С помощью данной обработки нужно создать, ну допустим 20 000 расходных накладных :)
 
D

Darlock

Не проще ли составить запрос к вашей внешней таблице (именно таблице), в запросе использовать итоги по Контрагенту/Договору. А потом уже циклами обходить результат. Запрос быстрее отработается и сервер не сильно загрузится.
 
G

Guest

funby
Вопрос уже стал совсем другим :)
Вам нужно протестировать нагрузку сервера при работе ПОЛЬЗОВАТЕЛЕЙ? Тогда при создании документов\справочников не забывайте открывать и закрывать формы, потому что там тоже происходят действия, причем иногда немаленькие.

Для удобства создайте таблицы в том же экселе, где забейте сколько угодно строк. В строке указываете артикул номенклатуры, количество, стоимость, код контрагента, код договора, дата. А далее обходите это все одним циклом и заполняете данные. Механизм как я описал в самом начале, только в пункте 2 нужно не обходить строки, а написать условие, что если один из реквизитов документа изменился по сравнению с предыдущей строкой, то нужно создавать новый документ.
 
F

funby

Честно говоря не имея практики в 1С и читая такое, глаза, невольно, с каждой строкой открываются всё шире и шире, а челюсть всё ниже и ниже. :)
 
G

Guest

funby
прочитайте link removed

Писать текст обработки вам тут никто не будет. Либо учитесь и заходите сюда за разъяснением непонятного, либо платите деньги тем, кто научился.
 
F

funby

Найлло Если Вы где-то увидели что я просил написать мне обработку, то шире открывайте глаза.
За данную ссылку отдельное спасибо, до этого на форумах не встречал.
 
G

Guest

Честно говоря не имея практики в 1С и читая такое, глаза, невольно, с каждой строкой открываются всё шире и шире, а челюсть всё ниже и ниже.

Что вы хотите получить здесь в ответах? Механизм я описал достаточно подробно, что еще ждет человек, который не имеет практики в 1С на форуме программистов в разделе 1С? Я вам могу еще посоветовать обратиться в раздел "работа", где найдутся желающие и имеющие практику люди помочь вам с вашей проблемой.
 
G

Gluk8888

Автор посмотри здесь: думаю тебе поможет.
+ если надо оценить производительность серверов то вот здесь есть полезная информация
 
G

Guest

funby
Нет, не правильно- я вам в каждом отвечал на то, как лучше сделать.

Скажите лучше, что вы хотели услышат в ответ на
Честно говоря не имея практики в 1С и читая такое, глаза, невольно, с каждой строкой открываются всё шире и шире, а челюсть всё ниже и ниже. smile.gif
?
 
F

funby

Найлло каждый думает как он хочет.
Сколько людей, столько и мнений. (с) Ганнибал Лектор

Спасибо за помощь.
 
F

funby

Вот что получилось.

Код:
ГСЧ = Новый ГенераторСлучайныхЧисел();
Для НомерДок = 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;
НовСтр.СуммаВсего = НовСтр.Сумма-НовСтр.СуммаНДС;	
КонецЦикла;
НовДок.Записать(РежимЗаписиДокумента.Проведение,РежимПроведенияДокумента.Неоперативный);
КонецЦикла;
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!