Версия для печати темы (https://pro1c.org.ua/index.php?s=1d2f1e38c1a3a0a2b73655161eb1eead&showtopic=47459)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование обычных форм 1С 8.2 и не интерфейсной логики _ Дозаполнение ТЧ документа "забытыми" или "новыми" данными из справочника

Автор: Constantus 27.08.18, 8:18

Приветствую, форумчане!
"Управление торговлей 10.3", (Моби-С 5.5). "ABBYY Ukraine", 2003-2014 (2.3.20.1)

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

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

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

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

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

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

Автор: andr_andrey 27.08.18, 8:51

Constantus @ Сегодня, 9:18 * ,
В стандартных решениях делают кнопку "Рассчитать по сотруднику".

Автор: Constantus 27.08.18, 11:21

Придумал "гениальнейшее решение".
В ТЧ справочника ввел новый реквизит "ИД" (текст, 200)

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

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


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

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

Теперь тогда вопрос: насколько это гениальное решение гениально? Где подводные валуны?

Автор: Bernet 27.08.18, 11:31

Constantus @ Сегодня, 12:21 * ,
Можно и проще:
1. Перед перезаполнением таб части выгружаете её в таблицу значений

КопияТЧ = ВАШАТАБЧАСТЬ.Выгрузить();

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

Автор: Flexy 27.08.18, 16:02

ТекСотрудники = ТабСотрудники.ВыгрузитьКолонку("Сотрудник");
ТаблицаНеПустая = ТекСотрудники.Количество() > 0;
Запрос.Текст = "
|ВЫБРАТЬ
|    Сотруники.Ссылка
|ИЗ
|    Справочник.Сотрудники КАК Сотрудники
|ГДЕ
|    ВЫБОР КОГДА &ТаблицаНеПустая ТОГДА Сотрудники.Ссылка НЕ В (&ТекСотрудники) ИНАЧЕ ИСТИНА КОНЕЦ

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua