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

Редактирование табличной части документа. Колонка количество.

Автор Yuriy78, 08 дек 2011, 12:45

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

Yuriy78

Цитата: Dethmontt от 10 дек 2011, 20:07

                    //А так?
                    СтрТабПоля.Количество = НовКол;
               
[code]

Так уже делал. Писал в ответе №6
[/code]

Yuriy78


Yuriy78

Вот код в рабочем варианте может кому то будет полезен:

Процедура КнопкаВыполнитьНажатие(Кнопка)

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

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

  Иначе
Сообщить("Номенклатура " + Строка(ЭлемЗапись.Номенклатура) + " аналога не имеет!!! ");
КонецЕсли;
КонецЦикла;
КонецЦикла;
   
//Делаем обход занесенных данных в табличное поле обработки.
//Производим вычитание остатков аналога номенклатуры.
//Записываем результаты в документ и сохраняем его.
Для Каждого ЭлемНомТабПоля Из ТабПоле Цикл
ПерНом = ЭлемНомТабПоля.Номенклатура;
ПерОстНаСкладе = ЭлемНомТабПоля.ОстатокНаСкладе;
Сообщить("Номенклатура ТабПоля: "+ ПерНом + " с остатком " + ПерОстНаСкладе);
Если Число(ПерОстНаСкладе) <> 0 Тогда
ОбъектПланЗакупок = докПланЗакупок.ПолучитьОбъект();
Для каждого СтрТабПоля из ОбъектПланЗакупок.СоставПлана Цикл
ПерНомВДок = СтрТабПоля.Номенклатура;
Сообщить("Это ПерНомВДок " + ПерНомВДок);
ПерКолВДок = СтрТабПоля.Количество;
Сообщить("Это ПерКолВДок " + ПерКолВДок);
Если СокрЛП(ПерНомВДок) = СокрЛП(ПерНом)  Тогда
Сообщить(Строка(ПерКолВДок) + " Старое количество!!!!!!!!!!!!!!!!!!");
НовКол = Число(ПерКолВДок - ПерОстНаСкладе);
Сообщить("Рассчитано: " + Строка(НовКол));
Если НовКол < 0 тогда
ОбъектПланЗакупок.СоставПлана.Удалить(СтрТабПоля);
Сообщить("Номенклатура " +ПерНомВДок+ " удалена из плана закупок. Т.к. требуемое       количество обеспечивают аналоги номенклатуры!!!");
Попытка
    ОбъектПланЗакупок.Записать(РежимЗаписиДокумента.Проведение);
Исключение
    Предупреждение("Невозможно провести документ.");
КонецПопытки;

Иначе
СтрТабПоля.Количество = НовКол;
Сообщить(Строка(НовКол) + " Новое количество!!!!!!!!!!!!!!!!!!");
Попытка
ОбъектПланЗакупок.Записать(РежимЗаписиДокумента.Проведение);
Исключение
Предупреждение("Невозможно провести документ.");
КонецПопытки;
КонецЕсли;
                                         Иначе
  Сообщить(ПерНом +" не найдена!!!");
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецПроцедуры


Но этот код работает в обработке. А как мне сделать что бы он корректно работал из формы открытого документа. Т.е. как мне обратится из обработки к открытому документу. Произвести там изменения количества и сохранить документ.
Я хочу сделать на форме документа кнопку вызова обработки. Вот моя форма со встроенной кнопкой



Подскажите пожалуйста.


Yuriy78

Цитата: has от 08 дек 2011, 14:44
Ну тогда если из документа будешь обработку вызывать, то передаешь ссылку. Опять же если документ записан, если новый документ, то передастся пустая ссылка.

Не могу найти как передать ссылку на документ. Подскажите пожалуйста как это сделать или дайте ссылку где можно прочитать.

Dethmontt

Для вызова обработки заполнения табличных частей Используется процедура Инициализировать(<Не помню сколько тут параметров>) - в этом случае СсылкаНаОбъект нафиг не нужна тебе сразу будет доступна табличная часть из которой вызвана обработка.
Если ты хочешь по какой то своей кнопке вызывать обработку - ну тогда передавай в вызов ссылку на документ
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Yuriy78

Цитата: Dethmontt от 11 дек 2011, 14:39
Если ты хочешь по какой то своей кнопке вызывать обработку - ну тогда передавай в вызов ссылку на документ

Так как это сделать? Я уже перерыл кучу информации и пока не нашел как это сделать. Подскажите код или дайте ссылку на источник.

Dethmontt

Пишешь вот такую функцию в своей обработке
Процедура Инициализировать(Объект, ИмяТЧ, ТЧ) Экспорт
подключаешь свою обработку в справочник внешнии обработки - заполнения табличных частей, выбираешь там какую табличную часть эта обработка будет выполнять и уже в теле процедуры "Инициализировать" пишешь свой алгоритм.
ГДЕ Объект - будет объект документ (или же справочник), ИмяТЧ - имя табличной части которая сейчас заполняется, ТЧ - сама табличная часть
(для это го никаких кнопок добавлять на форму не нужно).

P.S.
И в литературе (не помню в какой книжке) этот раздел называется подключение внешних обработок.
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Теги:

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

Рейтинг@Mail.ru

Поиск