Имя: Пароль:
1C
1С v8
Ввод на основании
0 ogion83
 
30.05.13
15:20
Всем здрасте.
Есть два дока АктВыгрузки и ПСА. Из Акта можно создавать ПСА.
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
   //{{__КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИ
   // Данный фрагмент построен конструктором.
   // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
   Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.АктВыгрузки") Тогда
       // Заполнение шапки
       Контрагент = ДанныеЗаполнения.Контрагент;
       МестоХранения = ДанныеЗаполнения.МестоХранения;
       Сотрудник = ДанныеЗаполнения.Сотрудник;
       Для Каждого ТекСтрокаВыгружаемоеСырьё Из ДанныеЗаполнения.ВыгружаемоеСырьё Цикл
           НоваяСтрока = СписокПривезенногоСырья.Добавить();
           НоваяСтрока.Засор = ТекСтрокаВыгружаемоеСырьё.Засор;
           НоваяСтрока.КоличествоБрутто = ТекСтрокаВыгружаемоеСырьё.КоличествоБрутто;
           НоваяСтрока.КоличествоНетто = ТекСтрокаВыгружаемоеСырьё.КоличествоНетто;
           НоваяСтрока.МПЗ = ТекСтрокаВыгружаемоеСырьё.МПЗ;
           НоваяСтрока.Сумма = ТекСтрокаВыгружаемоеСырьё.Сумма;
           НоваяСтрока.Цена = ТекСтрокаВыгружаемоеСырьё.Цена;
       КонецЦикла;
   КонецЕсли;
   //}}__КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИ
КонецПроцедуры

Как сделать так чтобы, если уже был создан ПСА из Акта, то открывался уже ранее созданный а не новый?
1 Mitriy
 
30.05.13
15:29
1. Добавить реквизит ДокументОснование, в который ту будешь записывать ссылку на документ - основание...
2. В обработке заполнения анализировать запросом, есть ли уже документ со ссылкой из ДанныеЗаполнения и если есть, то устанавливать СтандартнаяОбработка в Ложь и открывать форму найденного документа...
2 Mitriy
 
30.05.13
15:30
"со ссылкой из ДанныеЗаполнения" читай, как "с основанием из ДанныеЗаполнения"
3 ogion83
 
30.05.13
15:34
Ок. Благодарствую. Попробуем.
4 Mitriy
 
30.05.13
15:35
а вообще подход неверный изначально...
документ, введенный на основании можно откорректировать и он будет содержать только часть данных, а остальные данные нужно будет учесть другим документом, в этом случае правильно анализировать уже введенные данные и заполнять документ остатками, либо выводить пустым, а не запрещать ввод на основании...
5 ogion83
 
30.05.13
15:39
А запросом то каждый раз все документы перебирать не долго будет?
6 Mitriy
 
30.05.13
15:40
(5) откуда все перебирать, если у тебя будет ссылка и реквизит для поиска по этой ссылке?
7 MKZM
 
30.05.13
15:41
(5) Можно из регистров...
8 Михаил Козлов
 
30.05.13
15:41
(5) Можно из критериев отбора.
9 ogion83
 
30.05.13
16:17
Кто-нибудь может код показать или ссылку на хороший пример?
10 Mitriy
 
30.05.13
16:23
Запрос = Новый Запрос;
Запрос.Текст = "
|Выбор
|ТвойДокумент.Ссылка
|Из
|Документы.ТвойДокумент КАК ТвойДокумент
|Где
|ТвойДокумент.ДокументОснование = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", ДанныеЗаполнения);
Результат = Запрос.Выполнить();
Если Не Результат.Пустой() Тогда
СтандартнаяОбработка = Ложь;
Выборка = Результат.Выбрать();
Выборка.Следующий();
СсылкаНаДокумент = Выборка.Ссылка;
// тут открываешь форму
Возврат;
КонецЕсли;
11 ogion83
 
30.05.13
16:30
Этот код в начало процедуры ОбработкаЗаполнения?
12 Mitriy
 
30.05.13
16:38
(11) да, только со стандартной обработкой я напутал, она не отменяет открытие документа...
13 Nenaviwu1c20
 
30.05.13
16:42
Может все таки КритерийОтбора заюзаешь?
14 Nenaviwu1c20
 
30.05.13
16:42
удобная вещь я тебе скажу
15 Nenaviwu1c20
 
30.05.13
16:43
То есть если ты захочешь отобразить иерархию ввода на основании тебе будет удобно воспользоватся критерием
16 Mitriy
 
30.05.13
16:51
(0) формы управляемые или обычные?
17 ogion83
 
30.05.13
16:54
(12) Завтра опробую.
(13) А это с чем едят?)
18 ogion83
 
30.05.13
16:54
Формы обычные
19 Mitriy
 
30.05.13
17:03
(18) тогда проще, объявляешь эспортную процедуру модуля объекта мДокумент, которой присваиваешь и пишешь в нее ссылку на нужный документ, если Не Результат.Пустой(). Потом в ПередОткрытием анализируешь, если Не ЗначениеЗаполнено(мДокумент), ничего не делаешь, иначе выставляешь Отказ = Истина и открываешь форму ссылки в мДокумент...
20 ogion83
 
31.05.13
09:26
Вот что получилось:
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
Запрос = Новый Запрос;
Запрос.Текст = "
|Выбрать
|ПСАЮр.Ссылка
|Из
|Документ.ПСАЮр КАК ПСАЮр
|Где
|ПСАЮр.ДокументОснование = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", ДанныеЗаполнения);
Результат = Запрос.Выполнить();
Если Не Результат.Пустой() Тогда
   СтандартнаяОбработка = Ложь;
   Выборка = Результат.Выбрать();
   Выборка.Следующий();
   СсылкаНаДокумент = Выборка.Ссылка;
   Форма = СсылкаНаДокумент.ПолучитьФорму();
   Форма.Открыть();
   Возврат;
КонецЕсли;
   ДокументОснование = ДанныеЗаполнения;
   //{{__КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИ
   // Данный фрагмент построен конструктором.
   // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
   Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.АктВыгрузки") Тогда
       // Заполнение шапки
       Контрагент = ДанныеЗаполнения.Контрагент;
       МестоХранения = ДанныеЗаполнения.МестоХранения;
       Сотрудник = ДанныеЗаполнения.Сотрудник;
       Для Каждого ТекСтрокаВыгружаемоеСырьё Из ДанныеЗаполнения.ВыгружаемоеСырьё Цикл
           НоваяСтрока = СписокПривезенногоСырья.Добавить();
           НоваяСтрока.Засор = ТекСтрокаВыгружаемоеСырьё.Засор;
           НоваяСтрока.КоличествоБрутто = ТекСтрокаВыгружаемоеСырьё.КоличествоБрутто;
           НоваяСтрока.КоличествоНетто = ТекСтрокаВыгружаемоеСырьё.КоличествоНетто;
           НоваяСтрока.МПЗ = ТекСтрокаВыгружаемоеСырьё.МПЗ;
           НоваяСтрока.Сумма = ТекСтрокаВыгружаемоеСырьё.Сумма;
           НоваяСтрока.Цена = ТекСтрокаВыгружаемоеСырьё.Цена;
       КонецЦикла;
   КонецЕсли;
   //}}__КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИ
   
   КонецПроцедуры
Открывает форму если уже был документ на основании, но тут же открывает новый документ, как от этого избавиться?
21 ogion83
 
31.05.13
10:35
Что в 8-ке подобнее сделать сложнее чем в 7-ке? Ндаааа, улучшили...
22 ogion83
 
31.05.13
10:51
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
   Если ДокументОснование.Пустая() = Истина Тогда
       Отказ = Истина;
   КонецЕсли;
КонецПроцедуры
Добавил это в ПСА. Всё пашет как хотел.
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший