Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Автоматическое заполнение табличной части документы

В документе при выборе реквизита Услуга, должна автоматически заполняться ТЧ поле Оборудование.  Перечень составляющих находится в справочнике Оборудование, у справочника Оборудование владелец справочник Услуга. Помогите, пожалуйста, я новичок в этом. Знаю что делается это через запрос, но что я пишу ничего не работает(((((((((
Спасибо всем кто откликнется)
Ответ: Ошибка((((((((((


{Документ.Заказ.Форма.ФормаДокумента.Форма()}: Поле объекта не обнаружено (Значение)Параметр = Элемент.Значение;
Вопрос: Автоматическое заполнение табличной части документа

Как программным способом заполнить табличную часть документа данными из справочника "Сотрудники"(тип Ссылка)?
В табличной части Работники Организации документа заполняются сотрудники, потом идут пустые значения, и снова сотрудники повторяются несколько раз. В списке сотрудников должно быть 4, но загружается 99990 строк.

Код ниже:

ВыбФайл = Новый Файл(ИмяФайла);
Если НЕ ВыбФайл.Существует() Тогда
Сообщить("Файл не существует!");
Возврат;
КонецЕсли;

Попытка
Excel = Новый COMОбъект("Excel.Application");
Excel.WorkBooks.Open(ИмяФайла);
// Состояние("Обработка файла Microsoft Excel...");
ExcelЛист = Excel.Sheets(1);
Исключение
Сообщить("Ошибка. Возможно неверно указан номер листа книги Excel.");
Возврат;

КонецПопытки;

Фл = 1;
НомСтр = 2;
// создаем документ Начисление зарплаты работникам организаций
НовДок = Документы.НачислениеЗарплатыРаботникамОрганизаций.СоздатьДокумент();
НовДок.Дата = ТекущаяДата();
НовДок.ПериодРегистрации = НачалоМесяца(ТекущаяДата());
НовДок.Организация = Справочники.Организации.НайтиПоКоду("000000001");
НовДок.ПодразделениеОрганизации = Справочники.ПодразделенияОрганизаций.НайтиПоКоду("000000001");
НовДок.НормаДнейЗаМесяц = НормаДнейЗаМесяц;
НовДок.НормаЧасовЗаМесяц = НормаЧасовЗаМесяц;
НовДок.ПредварительныйРасчет = Ложь;

Сообщить("Начата загрузка документа Начисление");
Пока Фл = 1 Цикл

нСотрудник = СокрЛП(Строка(ExcelЛист.Cells(НомСтр,8).Value));

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СотрудникиОрганизаций.Ссылка КАК Ссылка
|ИЗ
| Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций";

РезультатЗапроса = Запрос.Выполнить().Выгрузить();

Для каждого Стр из РезультатЗапроса Цикл
НоваяСтрока = НовДок.РаботникиОрганизации.Добавить();
НоваяСтрока.Сотрудник = Стр.Ссылка;
КонецЦикла;

НоваяСтрока = НовДок.Начисления.Добавить();
НоваяСтрока.Авторасчет = Истина;
НоваяСтрока.Назначение = Справочники.СотрудникиОрганизаций.НайтиПоНаименованию(нСотрудник);
Если СокрЛП(Строка(ExcelЛист.Cells(НомСтр,4).Value)) = "1" Тогда
НоваяСтрока.ВидРасчета = ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.ОкладПоДням
ИначеЕсли СокрЛП(Строка(ExcelЛист.Cells(НомСтр,4).Value)) = "120" Тогда
НоваяСтрока.ВидРасчета = ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоНаименованию("Больничный за счет предприятия");
КонецЕсли;
НоваяСтрока.ДатаНачала = СокрЛП(Строка(ExcelЛист.Cells(НомСтр,2).Value));
НоваяСтрока.ДатаОкончания = СокрЛП(Строка(ExcelЛист.Cells(НомСтр,3).Value));
НоваяСтрока.БазовыйПериодНачало = СокрЛП(Строка(ExcelЛист.Cells(НомСтр,2).Value));
НоваяСтрока.БазовыйПериодКонец = СокрЛП(Строка(ExcelЛист.Cells(НомСтр,3).Value));
НоваяСтрока.Результат = СокрЛП(Строка(ExcelЛист.Cells(НомСтр,5).Value));
НоваяСтрока.Размер = СокрЛП(Строка(ExcelЛист.Cells(НомСтр,5).Value));
НоваяСтрока.ОтработаноДней = СокрЛП(Строка(ExcelЛист.Cells(НомСтр,6).Value));
НоваяСтрока.ОтработаноЧасов = СокрЛП(Строка(ExcelЛист.Cells(НомСтр,7).Value));
НоваяСтрока.НормаДнейЗаМесяц = СокрЛП(Строка(ExcelЛист.Cells(НомСтр,6).Value));
НоваяСтрока.НормаЧасовЗаМесяц = СокрЛП(Строка(ExcelЛист.Cells(НомСтр,7).Value));
НоваяСтрока.ОплаченоДнейЧасов = СокрЛП(Строка(ExcelЛист.Cells(НомСтр,6).Value));

НоваяСтрока = НовДок.НДФЛ.Добавить();
НоваяСтрока.НалоговыйПериод = НачалоМесяца(ТекущаяДата());
НоваяСтрока.Авторасчет = Истина;
НоваяСтрока.Сотрудник = Справочники.СотрудникиОрганизаций.НайтиПоНаименованию(СокрЛП(Строка(ExcelЛист.Cells(НомСтр,8).Value)));
НоваяСтрока.ДоходНДФЛ = Справочники.ВидыДоходовНДФЛ.Код01;
НоваяСтрока.ВидСтавки = Перечисления.ВидыСтавокНДФЛ.Основная;
НоваяСтрока.УвеличеннаяСтавка = Перечисления.ВидыСтавокНДФЛ.Увеличенная;

НомСтр = НомСтр+1;
Если ПустаяСтрока(ExcelЛист.Cells(НомСтр,1).Value) тогда
Фл = 0;
НовДок.Записать();
НовДок.ПолучитьФорму("ФормаДокумента").Открыть();
Сообщить("Завершена загрузка документа Начисление");
КонецЕсли;

КонецЦикла;
Excel.WorkBooks.Close();
Excel = 0;
КонецПроцедуры

Вложения:

  • Размер файла:
    128,5 КБ
    Просмотров:
    0
Ответ:
чета жесть какая то
ФЛ=1
Пока ФЛ=1 ЦИКЛ
Если ПустаяСтрока(ExcelЛист.Cells(НомСтр,1).Value) тогда
Фл = 0;

Отладчиком пройдите и посмотрите почему фл у вас неравно 0 после ваших 4х строк , может не пустаястрока
я канешн не спец но это воообще адекватно?)
--- Объединение сообщений, 18 май 2017 ---
Наставник подсказывает что есть какаято функция для подсчета количества строк , либо он пользуется ЗначениеЗаполнено()
Вопрос: Заполнение табличной части документа данными из справочника

Добрый день! Очень нужна ваша помощь ! Есть справочник Должности (на каждую должность список спец средств ) есть табличная часть с такими реквизитами Наименование спец средства,колличество,маркировка и т.д .
Есть документ личная карточка в котором тоже есть табличная часть ,как сделать чтобы при заполнении карточки при выборе профессии табличная часть карточки заполнялась автоматически данными из справочника
Ответ: а ну да слова цикл нет вот тут
1C
1
2
3
4
5
6
7
&НаСервере
Процедура ПриИзмененииПрофессииНаСервере()
Для Каждого Текстр из Объект.Профессия.ТвояТабличнаяЧасть ЦИКЛ
    НоваяСтрока = Объект.ТабличнаяЧастьДока.Добавить();
    ЗаполнитьЗначенияСвойств(НоваяСтрока, ТекСтр);//Это если имена реквизитов сопадают, если нет то по реквизитам через равенство
КонецЦикла;
КонецПроцедуры
Вопрос: Заполнение табличной части документа через подчиненный справочник

Доброго времени суток, помогите разобраться, у меня есть документ с номенклатурой, есть План видов характеристик в котором указаны свойства для номенклатуры и есть справочник "Значение свойств" который подченен этому плану и в нем указано значение характеристик. Подскажите пожалуйста, как мне сделать что бы когда я выбераю в документ для какой то номенклатуры свойства что бы выводило сразу все значение характеристик по этому свойству
Ответ: GreenkA, У конфигурации (конфигурацию я прикрепил к теме) есть документа "Сборка", который заполняется на основании документа "Спецификация". Документ спецификация делает движения по регистру сведений "РегистрСпецификации", как сделать что бы если в ручную в документ сборка добавляю системный блок, то по нему автоматически выберались детали с регистра и заносились в табличную часть.
Вот я написал запрос, но не пойму в какую процедуру его нужно вставить и немогу проверить правильный ли он так как документ на него вообще не реагирует
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    РегистрСпецификацииСрезПоследних.НоменклатураСистемныйБлок,
        |    РегистрСпецификацииСрезПоследних.Количество,
        |    РегистрСпецификацииСрезПоследних.Свойство,
        |    РегистрСпецификацииСрезПоследних.НоменклатураДетали
        |ИЗ
        |    РегистрСведений.РегистрСпецификации.СрезПоследних КАК РегистрСпецификацииСрезПоследних";
 
 
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Если СписокСистемныхБлоков.НоменклатураСобираемыйСистемныйБлок = ВыборкаДетальныеЗаписи.НоменклатураСистемныйБлок Тогда
            
            СписокДеталейНеобходимыхДляСборки.НоменклатураДетали = ВыборкаДетальныеЗаписи.НоменклатураДетали;
            СписокДеталейНеобходимыхДляСборки.СвойстваДетали = ВыборкаДетальныеЗаписи.Свойство;
            СписокДеталейНеобходимыхДляСборки.Количество = ВыборкаДетальныеЗаписи.Количество;
        КонецЕсли;
        
    КонецЦикла;
Вопрос: Программное заполнение табличной части документа из табличной части справочника

Доброго!
Ситуация, поставившая меня в тупик.
Имеем 1с 8.2 УФ
Имеем справочник "Работ"
Имеем документ с табличной частью, с реквизитом в табличной части "Работа"
Имеем справочник Регламентных работ, в каждом из элементов справочника есть табличная часть с реквизитом "Работа"(перечень работ - "набор работ")

Смысл всего задуманного - "пресеты", в конкретном случае "пресеты" работ с оборудованием заказчика.

Т.е. в идеале это команда на форме, с помощью которой открывается форма выбора элемента справочника(Регламентных работ), и в последствии происходит программное заполнение табличной части работ из табличной части справочника Регламентных работ.

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

Направьте, пожалуйста, начинающего на путь истинный.
Заранее спасибо
Ответ: GoodR, Это не рядом. Это вы сели в автомобиль и завели двигатель. Пока еще даже не трогались. Так что .... далеко не рядом.
В примере вам надо последний код, по тексту начинается с "Для завершения подбора создана команда формы, с обработчиком, выполняющим оповещение о выборе:" Вот это то что вам надо реализовать в своей базе
Вопрос: Автоматическое заполнение поля Сумма в табличной части документа

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

Здравствуйте!
Столкнулась с такой проблемой. Имеется 2 документа: "Акт" и "Ведомость". Документ "Ведомость" создается на основании документа "Акт". Необходимо заполнить табличную часть документа "Ведомость" данными из табличных частей нескольких документов "Акт", созданных за неделю (платформа 8.2).
Подскажите, как это реализовать?
Ответ: Tatiana21, можете, можете и не у меня)
Вопрос: Заполнение Табличной части документа

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

1C
1
2
3
4
5
&НаКлиенте
Процедура РасшифровкаНоменклатураПриИзменении(Элемент)
СтрокаТабличнойЧасти=Элементы.Расшифровка.ТекущиеДанные;
СтрокаТабличнойЧасти.ЕдИзм=СтрокаТабличнойЧасти.Номенклатура.ЕдиницаИзмерения;
КонецПроцедуры
Ответ: SHIFT_969, Делала так, но забыла обратиться именно к номенклатуре)
Спасибо!!! Все работает))
Вопрос: Заполнение табличной части документа при выборе реквизита

Доброго дня!
Будьте добры, подскажите, пожалуйста!

Имеется:
1. Справочник "ТехнологическаяКарта". В нем реквизит - "ГотоваяПродукция" и ТЧ "Сырье" с колонкой "Номенклатура"
2. Документ "ТехнологическаяОперация" с четырмя ТЧ - "ГотоваяПродукция", "Сырье", "Комплектующие" и "Убытки".
В данному документе один из реквизитов - "ТехнологическаяКарта" имеет тип -СправочникСсылка.ТехнологическаяКарта

Задача:

Как сделать, чтобы При выборе технологической карты, автоматически заполнились табличные части данными из справочника. А именно, чтоб в колонку "Номенклатура" ТЧ "ГотоваяПродукция" попали данные из реквизита "ГотоваяПродукция" справочника "ТехнологическаяКарта", а колонка "Номенклатура" ТЧ "Сырье" и "Убытки" заполнились Номенклатурой из ТЧ "Сырье" справочника "ТехнологическаяКарта".

Очень буду признателен за помощь! Только если есть возможность, то не надо просто скидывать код, а пояснить еще. Понимаю, что надо делать запрос и цикл с выборкой, но ни когда еще этого не делал, только учусь и хочу понимать что буду делать, чтоб потом не обращаться повторно с просьбой что ни так в моих кодах)))

За ранее благодарен!

Добавлено через 1 час 59 минут
Попробовал вытянуть данные хотя бы для одной ТЧ:
Код 1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
&НаКлиенте
Процедура ТехнологическаяКартаПриИзменении(Элемент)
         ЗаполнитьТабличнуюЧасть();
КонецПроцедуры
 
&НаСервере
Процедура ЗаполнитьТабличнуюЧасть()
Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    ГотоваяПродукция.Наименование
        |ИЗ
        |    Справочник.ТехнологическиеКарты КАК ТехнологическиеКарты";
 
    РезультатЗапроса = Запрос.Выполнить().Выгрузить();
    
    Для каждого Стр из РезультатЗапроса Цикл
        НоваяСтрока = Объект.ГотоваяПродукция.Добавить();
        НоваяСтрока.Номенклатура = Результат.Наименование; 
    КонецЦикла
КонецПроцедуры
Что-то не получается (((
Ответ: Обязательно напишу - я от помощи не отказываюсь никогда)))). Завтра только, а то пора домой смываться с работы))). Спасибо!
Вопрос: Заполнение табличной части документа "Инвентарных номеров"

Здравствуйте многоуважаемые форумчане.
Обращаюсь к Вам за очередной помощью. После долгих исканий и читаний сайтов и книг. Я наконец-то нашел как можно создать инвентарные номера и соостветственно по ним вести учет. Но вот не задача.......
1) Данные номера не правильно идут. то есть Например: Создан Справочник - Краска для маркера. у него есть поле идентификационный номер. Далее в документе Получение Краски, в поле "Идентификационный номер " автоматически вставляется данные из поля "Идентификационный номер" из справочника. "BTK001" или "BDK001".
И когда они вставляются то на конце прибавляется цифра например "BTK0010" или "BTK0011" и.т.д. Проблема состоит в следующем когда пользователь выбирает другую краску с другим инвентарным номером, то она продолжает счет например предыдущее поле было под инвентарным номером "BTK0013" следующее поле идет под "BDK004"
2) как сделать так чтобы при создании следующего документа инвентарный номер не начинал с самого начало а продолжал отсчет. Да и вообще проверку сделать. И при окончании краски удалить запись из документа Получение Краски.
В интернете я нашел и доработал код:

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
&НаСервере
Функция ПолучитьЦвет (Ссылка)
 Возврат Ссылка.ЦветКраски; 
КонецФункции
 
Функция ПолучитьОбъем(Ссылка)
 Возврат Ссылка.Объем;  
КонецФункции
 
Функция ПолучитьТекущуюДату() Экспорт
 Возврат ТекущаяДата(); 
КонецФункции
 
Функция ИдентификацонныйНомерКраски(Ссылка)
//ИД = Справочники.КраскаДляМаркера.НайтиПоНаименованию(Ссылка);    
Возврат Ссылка.ИдентификационныйНомер;  
 Ссылка.ИдентификационныйНомер = Число(Ссылка.ИдентификационныйНомер);
 Постфикс = 1;
КонецФункции
 
&НаКлиенте
Процедура КраскаДляМаркераНаименованиеКраскиПриИзменении(Элемент)
    СтрокаТабЧасти = Элементы.КраскаДляМаркера.ТекущиеДанные;
    //ПредСтрокаТаб = Элементы.КраскаДляМаркера.ДанныеСтроки(Объект.КраскаДляМаркера.Индекс(Элементы.КраскаДляМаркера.ТекущиеДанные)-1);
    СтрокаТабЧасти.ЦветКраски = ПолучитьЦвет(СтрокаТабЧасти.НаименованиеКраски);
    //СтрокаТабЧасти.ИдентификационныйНомер = ИдентификацонныйНомерКраски(СтрокаТабЧасти.НаименованиеКраски);
    СтрокаТабЧасти.ИдентификационныйНомер = ИдентификацонныйНомерКраски(СтрокаТабЧасти.НаименованиеКраски);
    СтрокаТабЧасти.Объем = ПолучитьОбъем(СтрокаТабЧасти.НаименованиеКраски);
    СтрокаТабЧасти.ДатаПолучения = ПолучитьТекущуюДату();
    ///ЛеваяСторона = ИдентификацонныйНомерКраски(СтрокаТабЧасти.НаименованиеКраски);
    ///ПраваяСторона = Число(Прав(ПредСтрокаТаб.ИдентификационныйНомер, 2));
    //ПраваяСторона = ПраваяСторона+1;
    //СтрокаТабЧасти.ИдентификационныйНомер = ЛеваяСторона+Строка(Формат(ПраваяСторона, "ЧЦ=2; ЧВН="));
    Если СтрокаТабЧасти.ИдентификационныйНомер = "BTK001" Тогда 
        СтрокаТабЧасти.ИдентификационныйНомер = "BTK001" + Формат(Постфикс, "ЧЦ=2");
        Постфикс = Постфикс+1;
    КонецЕсли;
    
    Если  СтрокаТабЧасти.ИдентификационныйНомер = "BTK101" Тогда 
        СтрокаТабЧасти.ИдентификационныйНомер = "BTK101" + Формат(Постфикс, "ЧЦ=2");
        Постфикс = Постфикс+1;
    КонецЕсли;
    
    Если СтрокаТабЧасти.ИдентификационныйНомер = "BDK001" Тогда 
        СтрокаТабЧасти.ИдентификационныйНомер = "BDK001" + Формат(Постфикс, "ЧЦ=2");
        Постфикс = Постфикс+1;
    КонецЕсли;
    
    Если СтрокаТабЧасти.ИдентификационныйНомер = "BDK101" Тогда 
        СтрокаТабЧасти.ИдентификационныйНомер = "BDK101" + Формат(Постфикс, "ЧЦ=2");
        Постфикс = Постфикс+1;
    КонецЕсли;
    
КонецПроцедуры
Я знаю что это нужно делать с помощью запроса. но когда я создал запрос то у меня вообще посыпалось очень много ошибок. Которые я вообще не смог исправить.
Также высылаю вам саму конфигурацию.
Заранее благодарю Вас многоуважаемые форумчане.
Ответ: ОК спасибо большое Вам