Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Дозаполнение ТЧ документа "забытыми" или "новыми" данными из справочника
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
Constantus
Приветствую, форумчане!
"Управление торговлей 10.3", (Моби-С 5.5). "ABBYY Ukraine", 2003-2014 (2.3.20.1)

Имеется самописные справочник "Сотрудники" и самописный документ "Начисление заработной платы.

В документе "Начисление" ТЧ заполняется автоматически по кнопке. Код обходит справочник "Сотрудники" и по определенному алгоритму заполняет нужных сотрудников в ТЧ документа "Начисление".

Код работает правильно и без проблем. Но столкнулся со следующей проблемой.

Предположим забыли добавить в справочник "Сотрудники" нового сотрудника и/или перевели в другой отдел, поменяли оклад и т.д.

Конечно, можно взять и нажать вышеупомянутую кнопку и ТЧ "Начисления" заполнится новым правильным списком, но данные расчета по "старым" сотрудникам естественно затруться и расчет нужно будет проводить заново, что крайне плохо...

Каким образом можно сделать при заполнении ТЧ документа проверку, что по такому-то сотруднику уже есть данные в ТЧ и добавлять его не нужно, т.е. оставить данные ТЧ не измененными? Т.е. дозаполнить ТЧ только "новыми" или "забытыми" сотрудниками?
andr_andrey
Constantus @ Сегодня, 9:18 необходимо зарегистрироваться для просмотра ссылки ,
В стандартных решениях делают кнопку "Рассчитать по сотруднику".
Constantus
Придумал "гениальнейшее решение".
В ТЧ справочника ввел новый реквизит "ИД" (текст, 200)

При создании новой записи в ТЧ справочника добавил код:

Элемент.ТекущиеДанные.ИД = Новый УникальныйИдентификатор;


Уникальный код создается типа: d831cd77-2b82-42b1-9153-9b1a44831329

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

Теперь тогда вопрос: насколько это гениальное решение гениально? Где подводные валуны?
Bernet
Constantus @ Сегодня, 12:21 необходимо зарегистрироваться для просмотра ссылки ,
Можно и проще:
1. Перед перезаполнением таб части выгружаете её в таблицу значений
КопияТЧ = ВАШАТАБЧАСТЬ.Выгрузить();

2. Очищаем ТЧ. В момент заполнения ищете сотрудника в выгруженной шагом ранее таблице, если он там есть заполняете строку таб части через данные из таблицы значений, иначе добавляете просто новую строку
СтруктураПоиска = Новый Структура;
СтруктураПоиска.Вставить("Сотрудник", ВашСотрудник);
НайденныеСтроки = ВАШАТАБЧАСТЬ.НайтиСтроки(СтруктураПоиска);
Если НайденныеСтроки.Количество() = 0 Тогда
    НоваяСтрока = ВАШАТАБЧАСТЬ.Добавить();
Иначе
    НоваяСтрока = ВАШАТАБЧАСТЬ.Добавить();
    ЗаполнитьЗначенияСвойств(НоваяСтрока, НайденныеСтроки[0]);
КонецЕсли;
Flexy
ТекСотрудники = ТабСотрудники.ВыгрузитьКолонку("Сотрудник");
ТаблицаНеПустая = ТекСотрудники.Количество() > 0;
Запрос.Текст = "
|ВЫБРАТЬ
|    Сотруники.Ссылка
|ИЗ
|    Справочник.Сотрудники КАК Сотрудники
|ГДЕ
|    ВЫБОР КОГДА &ТаблицаНеПустая ТОГДА Сотрудники.Ссылка НЕ В (&ТекСотрудники) ИНАЧЕ ИСТИНА КОНЕЦ
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.