Помощь - Поиск - Пользователи - Календарь
Полная версия: ЛЗК
1C-PRO - Форум по 1С > Форумы по платформе "1С:Предприятие 8.x" > (8.х) Конфигурирование на платформе "1С:Предприятие 8.x"
Vovan27
Подскажите как сделать, я делаю заявку, и мне нужно чтоб при вводе количества горючева в заявке, автоматически создавалась лимитно заборная карта
Эмин
1. Ваша конфигурация?
2. Надо писать "Горючего"

В следующий раз тема будет просто удалена.
Vovan27
Цитата(Эмин @ 21.7.2008, 12:55) *

1. Ваша конфигурация?
2. Надо писать "Горючего"
В следующий раз тема будет просто удалена.


Сори, за орфографические ошибки, необратил внимания.
А на счет конфигурации то она с нуля рисованая, так что я хотел бы просто принцип узнать как делается то что я выше описал, на любом примере.
Kaboom
Если бы знать что такое "лимитно заборная карта", то можно про что то и думать...
Vovan27
да впринципе неважно что это, я хотел бы узнать сам принцип, как при вводе определенной колонки в документе сделать так чтобы автоматически формировался другой документ, ну а вообще ниже два скрина, заявка на топливо и ЛЗК(лимитно заборная карта)
интересует чтоб при заполнении в заявке колонки "Заправлено" формировалась автоматически ЛЗК
Melanto
А вариант с событием "Окончание ввода текста" не подойдет?
Vovan27
Цитата(Melanto @ 22.7.2008, 9:52) *

А вариант с событием "Окончание ввода текста" не подойдет?

А можно на примере? , мне так легче будит разобраться, я ж тока начинающий. зарание пасиба
Melanto
Цитата(Vovan27 @ 22.7.2008, 11:11) *

А можно на примере? , мне так легче будит разобраться, я ж тока начинающий. зарание пасиба


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

Нажмите для просмотра прикрепленного файла
Эмин
Вообще учтите, вот вы так сделаете, а что будет после того, как вы удалите строку из документа? Будете искать вашу ЛЗК и удалять тоже?

Есть несколько вариантов
1. На мой взгляд более правильный - это обработать "НачалоВыбора" у вашей ячейки, в обработчике написать:
Код

СтандартнаяОбработка = Ложь;
ЛЗК = ... //Создать ЛЗК
// Заполнить ячейку нужным значением,
// я думаю, что оно из ЛЗК и возьмется



2. После того как ввели текст обработкть создания ЛЗК, событие "ОкончаниеВводаТекста", тут Melanto прав.

Но в любом случае, что бы вы ни сделали я очень рекомендую в строке делать ссылку на вашу ЛЗК, чтобы можно было легко отредактировать ЛЗК (не создавать повторно, в случае изменения в тексте), а так же удалять их, Если удалена строка из документа.
Vovan27
Цитата(Эмин @ 24.7.2008, 12:46) *

Вообще учтите, вот вы так сделаете, а что будет после того, как вы удалите строку из документа? Будете искать вашу ЛЗК и удалять тоже?

Есть несколько вариантов
1. На мой взгляд более правильный - это обработать "НачалоВыбора" у вашей ячейки, в обработчике написать:
Код

СтандартнаяОбработка = Ложь;
ЛЗК = ... //Создать ЛЗК
// Заполнить ячейку нужным значением,
// я думаю, что оно из ЛЗК и возьмется




2. После того как ввели текст обработкть создания ЛЗК, событие "ОкончаниеВводаТекста", тут Melanto прав.

Но в любом случае, что бы вы ни сделали я очень рекомендую в строке делать ссылку на вашу ЛЗК, чтобы можно было легко отредактировать ЛЗК (не создавать повторно, в случае изменения в тексте), а так же удалять их, Если удалена строка из документа.



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

Если у кого есть примеры выполнения таких вещей, буду благодарен если поделитесь
Vovan27
вот что у меня получилось:
в документе источнике:

Код

Процедура НоменклатураЗаправленоПриИзменении(Элемент)
НовДокумент=Документы.ЛимитноЗаборнаяКарта.СоздатьДокумент();
НовДокумент.Заполнить(ссылка);
ФормаНовыйДокумент=НовДокумент.ПолучитьФорму(,ЭтаФорма);
ФормаНовыйДокумент.ОткрытьМодально();
КонецПроцедуры



в документе приемнике:

Код

Процедура ОбработкаЗаполнения(Основание)
Если ТипЗнч(Основание) = Тип("ДокументСсылка.ЗаявкаНаТопливо") Тогда
// Заполнение шапки
Автор = Основание.Автор;
Организация = Основание.Организация;
ПоследняяКорректировка = Основание.ПоследняяКорректировка;
Примечание = Основание.Примечание;
Отправитель = Основание.Склад;
Склад = Основание.Склад;
Для Каждого ТекСтрокаНоменклатура Из Основание.Номенклатура Цикл
НоваяСтрока = Номенклатура.Добавить();
НоваяСтрока.Номенклатура = ТекСтрокаНоменклатура.ВидТоплива;
НоваяСтрока.Ед = ТекСтрокаНоменклатура.Ед;
НоваяСтрока.Количество = ТекСтрокаНоменклатура.Заправлено;
НоваяСтрока.Склад = ТекСтрокаНоменклатура.Транспорт;
КонецЦикла;
КонецЕсли;
КонецПроцедуры



а как сделать так чтобы в получающий документ в табличную часть бралась только та строка в которой я поставил цифру, а не все строки которые там есть
Vovan27
Всё разобрался, всем спасиба, если кому интересна то выложу как получилось
Vovan27
Вот документ источник
Код

Процедура НоменклатураЗаправленоПриИзменении(Элемент)
ТекСтрока=ЭлементыФормы.Номенклатура.ТекущиеДанные;
НовДокумент=Документы.ЛимитноЗаборнаяКарта.СоздатьДокумент();
НовДокумент.Заполнить(ссылка);
НовДокумент.НовыйСклад = ТекСтрока.Транспорт;
НовДокумент.Получатель = ТекСтрока.Механизатор;
НовДокумент.Примечание = "Заполнен по Заявке на топливо № " + Номер + " от " + Дата;
НоваяСтрока = НовДокумент.Номенклатура.Добавить();
НоваяСтрока.Номенклатура = ТекСтрока.ВидТоплива;
НоваяСтрока.Ед = ТекСтрока.Ед;
НоваяСтрока.Количество = ТекСтрока.Заправлено;
НоваяСтрока.Коэффициент = 1;
ФормаНовыйДокумент=НовДокумент.ПолучитьФорму(,ЭтаФорма);
ФормаНовыйДокумент.ОткрытьМодально();
КонецПроцедуры



Вот приемник
Код

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



Все красиво передает и заполняет как надо, а теперь помогите плз с таким:
У меня в документе источнике, т.е. "Заявка на топливо" есть еще такая колонка в табличной части "Заправщик" она у меня "булево" как мне сделать так чтоб только передавались те строки в документ приемник в которых в этой колонке "Заправлено" стоит галочка
Vovan27
код

Код

Процедура НоменклатураЗаправленоПриИзменении(Элемент)
ТекСтрока=ЭлементыФормы.Номенклатура.ТекущиеДанные;
НовДокумент=Документы.ЛимитноЗаборнаяКарта.СоздатьДокумент();
НовДокумент.Заполнить(ссылка);
НовДокумент.Автор = Автор;
НовДокумент.Дата = Дата;
НовДокумент.Склад = Склад;
НовДокумент.Отправитель = Склад;
НовДокумент.Организация = Организация;
НовДокумент.ПоследняяКорректировка = ПоследняяКорректировка;
НовДокумент.НовыйСклад = ТекСтрока.Транспорт;
НовДокумент.Получатель = ТекСтрока.Механизатор;
НовДокумент.Примечание = "Заполнен по Заявке на топливо № " + Номер + " от " + Дата;
НоваяСтрока = НовДокумент.Номенклатура.Добавить();
НоваяСтрока.Номенклатура = ТекСтрока.ВидТоплива;
НоваяСтрока.Ед = ТекСтрока.Ед;
НоваяСтрока.Количество = ТекСтрока.Заправлено;
НоваяСтрока.Коэффициент = 1;
ФормаНовыйДокумент=НовДокумент.ПолучитьФорму(,ЭтаФорма);
ФормаНовыйДокумент.ОткрытьМодально();
КонецПроцедуры



Это у меня создает новый документ при заполнении колонки заправлено

А ниже идущее создает документы при нажатии на кнопку заполнить

Код

Процедура ЗаполнитьПеремещение(Элемент)
ТекСтрока=ЭлементыФормы.Номенклатура.ТекущиеДанные;
НовДокумент = Документы.Перемещение.СоздатьДокумент();
Для каждого ТекСтрока из Номенклатура Цикл
Если ТекСтрока.Заправщик=Истина Тогда
НовДокумент.Заполнить(ссылка);
НовДокумент.Автор = Автор;
НовДокумент.Дата = Дата;
НовДокумент.Склад = Склад;
НовДокумент.Отправитель = Склад;
НовДокумент.Организация = Организация;
НовДокумент.Получатель = Заправщик;
НовДокумент.НовыйСклад = Заправщик;
НовДокумент.ПоследняяКорректировка = ПоследняяКорректировка;
НовДокумент.Примечание = "Заполнено по Заявке на топливо № " + Номер + " от " + Дата;
НоваяСтрока = НовДокумент.Номенклатура.Добавить();
НоваяСтрока.Номенклатура = ТекСтрока.ВидТоплива;
НоваяСтрока.НоменклатураСтало = ТекСтрока.ВидТоплива;
НоваяСтрока.Номенклатура = ТекСтрока.ВидТоплива;
НоваяСтрока.Ед = ТекСтрока.Ед;
НоваяСтрока.Количество = ТекСтрока.Заявлено;
НоваяСтрока.Склад = ТекСтрока.Транспорт;
НоваяСтрока.Коэффициент = 1;
Иначе Продолжить;
КонецЕсли;
КонецЦикла;
ФормаНовыйДокумент=НовДокумент.ПолучитьФорму(,ЭтаФорма);
ФормаНовыйДокумент.Открыть();
Для каждого ТекСтрока из Номенклатура Цикл
Если ТекСтрока.Заправщик=Истина Тогда
НовДокумент = Документы.ЛимитноЗаборнаяКарта.СоздатьДокумент();
НовДокумент.Заполнить(ссылка);
НовДокумент.Автор = Автор;
НовДокумент.Дата = Дата;
НовДокумент.Склад = Заправщик;
НовДокумент.Отправитель = Заправщик;
НовДокумент.Организация = Организация;
НовДокумент.ПоследняяКорректировка = ПоследняяКорректировка;
НовДокумент.НовыйСклад = ТекСтрока.Транспорт;
НовДокумент.Получатель = ТекСтрока.Механизатор;
НовДокумент.Примечание = "Заполнен по Заявке на топливо № " + Номер + " от " + Дата;
НоваяСтрока = НовДокумент.Номенклатура.Добавить();
НоваяСтрока.Номенклатура = ТекСтрока.ВидТоплива;
НоваяСтрока.Ед = ТекСтрока.Ед;
НоваяСтрока.Количество = ТекСтрока.Заявлено;
НоваяСтрока.Коэффициент = 1;
ФормаНовыйДокумент=НовДокумент.ПолучитьФорму(,ЭтаФорма);
ФормаНовыйДокумент.Записать();
Иначе Продолжить;
КонецЕсли;
КонецЦикла;
КонецПроцедуры




А теперь подскажите такое, как мне сделать так чтоб документ перемещение создавался с временем на минуту меньше чем Лимитно заборная карта
Melanto
ДатаПеремещения=ДатаЛимитка-60
Если ничего не путаю, там же все в секундах

По крайней мере, когда надо было вычесть ровно 30 дней, это выглядело так

МассивНачальныхДат[4]=Дата-(30)*60*60*24;
Vovan27
Цитата(Melanto @ 8.8.2008, 14:44) *

ДатаПеремещения=ДатаЛимитка-60
Если ничего не путаю, там же все в секундах

По крайней мере, когда надо было вычесть ровно 30 дней, это выглядело так

МассивНачальныхДат[4]=Дата-(30)*60*60*24;


хм, помогло но немнога нетак, еси ставил в перемещении - к дате то мне число плюсовалось, а поставил в лимите к дате + она мне время увеличела, впринципе меня устраивает,
А еще вопросик, как в документе перемещение, который формируется сделать так чтоб в табличной части одинаковыи позиции номенклатуры сумировались
т.е. в заявке у мну например бензин а-80 30литров, а-95 40литров, потом еще идет а-80 20литров,
как сделать чтоб в перемещении а-80 был не два раза а один раз с сумой литров, т.е. в перемещении будит а-80 50литров и а-95 40 литров ?
Melanto
Есть вот такая фиговина:

Табличная часть
Свернуть (GroupBy)
Синтаксис:
Свернуть(<Колонки группировок>, <Колонки суммирования>)
Параметры:
<Колонки группировок> (обязательный)
Тип: Строка. Имена колонок, разделенные запятыми, по которым необходимо группировать строки табличного поля.
<Колонки суммирования> (необязательный)
Тип: Строка. Имена колонок, разделенные запятыми, по которым необходимо суммировать значения в строках табличного поля.
Описание:
Осуществляет свертку табличной части по указанным колонкам группировки. Строки, у которых совпадают значения в колонках, указанных в первом параметре, сворачиваются в одну строку. Значения этих строк, хранящиеся в колонках, указанных во втором параметре, накапливаются.
Важно! Оба списка колонок должны покрывать всю табличную часть . Списки колонок не должны пересекаться.

Пример:
Состав.Свернуть("Номенклатура", "Количество, Сумма, Всего");

Других примеров, увы, под рукой нет
Vovan27
Цитата(Melanto @ 8.8.2008, 15:51) *

Есть вот такая фиговина:

Табличная часть
Свернуть (GroupBy)
Синтаксис:
Свернуть(<Колонки группировок>, <Колонки суммирования>)
Параметры:
<Колонки группировок> (обязательный)
Тип: Строка. Имена колонок, разделенные запятыми, по которым необходимо группировать строки табличного поля.
<Колонки суммирования> (необязательный)
Тип: Строка. Имена колонок, разделенные запятыми, по которым необходимо суммировать значения в строках табличного поля.
Описание:
Осуществляет свертку табличной части по указанным колонкам группировки. Строки, у которых совпадают значения в колонках, указанных в первом параметре, сворачиваются в одну строку. Значения этих строк, хранящиеся в колонках, указанных во втором параметре, накапливаются.
Важно! Оба списка колонок должны покрывать всю табличную часть . Списки колонок не должны пересекаться.

Пример:
Состав.Свернуть("Номенклатура", "Количество, Сумма, Всего");

Других примеров, увы, под рукой нет


вот что говорит: {Документ.ЗаявкаНаТопливо.Форма.ФормаДокумента(61,8)}: Процедура или функция с указанным именем не определена (Свернуть)
<<?>>Свернуть("Номенклатура", "Количество");
Melanto
Не Документ, не его форма, а ТабличнаяЧасть
Кажется, д.б. так:
Код
НовыйДокумент.Номенклатура.Свернуть("номенклатура","количество")



Только учтите, в результате в ТЧ Номенклатура будет две колонки - номенклатура и количество, больше ничего
Vovan27
Цитата(Melanto @ 8.8.2008, 16:05) *

Не Документ, не его форма, а ТабличнаяЧасть
Кажется, д.б. так:
Код
НовыйДокумент.Номенклатура.Свернуть(\"номенклатура\",\"количество\")


Только учтите, в результате в ТЧ Номенклатура будет две колонки - номенклатура и количество, больше ничего


хм а есть вариант чтоб и остальные колонки были, у меня там еще единица измерения и коэффициент ?
Melanto
Цитата(Vovan27 @ 8.8.2008, 17:16) *

хм а есть вариант чтоб и остальные колонки были, у меня там еще единица измерения и коэффициент ?

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

Код
ВыручкаПоТоварам.Свернуть("Номенклатура, СчетДоходовНУ, СубконтоНУ","СуммаБезНДС,Количество");

Vovan27
Цитата(Melanto @ 8.8.2008, 16:32) *

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

Код
ВыручкаПоТоварам.Свернуть(\"Номенклатура, СчетДоходовНУ, СубконтоНУ\",\"СуммаБезНДС,Количество\");




Если ставлю так:

НовДокумент.Номенклатура.Свернуть("Номенклатура,Ед,Коэффициент","Количество");

то несворачивает ничего, Ед у меня л. (литры)
Vovan27
Порылся немного в хелпе вот что получилось:
Код

Процедура ЗаполнитьПеремещение(Элемент)
ТекСтрока=ЭлементыФормы.Номенклатура.ТекущиеДанные;
НовДокумент = Документы.Перемещение.СоздатьДокумент();
НовДокумент.Заполнить(ссылка);
НовДокумент.Автор = Автор;
НовДокумент.Дата = Дата;
НовДокумент.Склад = Склад;
НовДокумент.Отправитель = Склад;
НовДокумент.Организация = Организация;
НовДокумент.Получатель = Заправщик;
НовДокумент.НовыйСклад = Заправщик;
НовДокумент.ПоследняяКорректировка = ПоследняяКорректировка;
НовДокумент.Примечание = "Заполнено по Заявке на топливо № " + Номер + " от " + Дата;
Для каждого ТекСтрока из Номенклатура Цикл
Если ТекСтрока.Заправщик=Истина Тогда
НоваяСтрока = НовДокумент.Номенклатура.Найти(ТекСтрока.ВидТоплива,"Номенклатура");
Если НоваяСтрока = неопределено Тогда
НоваяСтрока = НовДокумент.Номенклатура.Добавить();
НоваяСтрока.Количество = 0;
КонецЕсли;
НоваяСтрока.Номенклатура = ТекСтрока.ВидТоплива;
НоваяСтрока.НоменклатураСтало = ТекСтрока.ВидТоплива;
НоваяСтрока.Ед = ТекСтрока.Ед;
НоваяСтрока.Количество = НоваяСтрока.Количество+ТекСтрока.Заявлено;
НоваяСтрока.Склад = ТекСтрока.Транспорт;
НоваяСтрока.Коэффициент = 1;
НовДокумент.Номенклатура.Свернуть("Номенклатура,Ед,Коэффициент","Количество");
Иначе Продолжить;
КонецЕсли;
КонецЦикла;
ФормаНовыйДокумент=НовДокумент.ПолучитьФорму(,ЭтаФорма);
ФормаНовыйДокумент.Открыть();

Для каждого ТекСтрока из Номенклатура Цикл
Если ТекСтрока.Заправщик=Истина Тогда
НовДокумент = Документы.ЛимитноЗаборнаяКарта.СоздатьДокумент();
НовДокумент.Заполнить(ссылка);
НовДокумент.Автор = Автор;
НовДокумент.Дата = Дата+60;
НовДокумент.Склад = Заправщик;
НовДокумент.Отправитель = Заправщик;
НовДокумент.Организация = Организация;
НовДокумент.ПоследняяКорректировка = ПоследняяКорректировка;
НовДокумент.НовыйСклад = ТекСтрока.Транспорт;
НовДокумент.Получатель = ТекСтрока.Механизатор;
НовДокумент.Примечание = "Заполнен по Заявке на топливо № " + Номер + " от " + Дата;
НоваяСтрока = НовДокумент.Номенклатура.Добавить();
НоваяСтрока.Номенклатура = ТекСтрока.ВидТоплива;
НоваяСтрока.Ед = ТекСтрока.Ед;
НоваяСтрока.Количество = ТекСтрока.Заявлено;
НоваяСтрока.Коэффициент = 1;
ФормаНовыйДокумент=НовДокумент.ПолучитьФорму(,ЭтаФорма);
ФормаНовыйДокумент.открыть();
Иначе Продолжить;
КонецЕсли;
КонецЦикла;
КонецПроцедуры



Теперь все красиво сворачивает

Осталось решить последний вопрос, как сделать блокировку документа?
Нужно чтоб как только записал докумен блокировалось для изменения все кроме колонки Заправлено и Заправщик в табличной части документа.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2009 Invision Power Services, Inc.