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

(Корректировка движений регистров)

Автор GanG031, 15 фев 2016, 11:03

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

GanG031

Доброго времени суток! Суть следующая: Есть обработка, которая выгружает определенные данные из регистра накопления, а именно: (Сотрудник, Сумма). Выгружает в текстовый файл txt, Разделяя записи точкой с запятой (;).
Требуется написать обработку, которая будет сравнивать эти выгруженные данные с таким же регистром в этой же конфигурации, а именно соответствие сумм для каждого сотрудника, и если сумма отличается, то изменять на ту, которая в находится в текстовом файле. Все это делается на управляемом приложении 8.3. Подскажите пожалуйста общий алгоритм действий. С тем, что бы написать обработку выгрузки в файл, я разобрался, теперь надо разобраться со сравнением, и изменением значений. Я это вижу примерно как: создаем запрос, где выбираем нужные данные из нужного нам регистра, и в цикле уже читаем нашу выборку, и наш внешний txt файл, и сравниваем значения, но как именно дать соответствие "Сотрудник" из регистра, сотруднику из txt файла, и сравнить суммы? Или может я что то не так понимаю? Помогите пожалуйста! Заранее спасибо!

KatiaP

Представление типа значения в тип строка, а затем сравнение строк

Rasty

Если у вас сотрудник выгружается Наименование, то делаете найти по наименование, если выгружается код сотрудника, то ищите по коду сотрудника, я бы на вашем месте, сначала парсил файл, создал табличку с данными из файла, потом запросом получал данные из регистра по сотрудникам из таблички, там же в запросе сравнивал сумму из регистра и из таблички (результат сравнения булево), потом методом НайтиСтроки() получал сотрудников, у которых суммы не равны, затем получаем менеджер записи регистра по данному сотруднику и изменяем сумму.
Помогли - Скажи спасибо! Решил сам - поделись решением!
:)

cska-fanat-kz

в файле у вас Сотрудник в виде строки.
т.е. надо будет получить ссылку.
скорее всего с помощью НайтиПоНаименованию()
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

GanG031

Начал делать так:

ПрочитанныйТекст = Новый ЧтениеТекста(ПутьКФайлу);
Запрос = Новый Запрос;
   Запрос.Текст =
      "ВЫБРАТЬ
      |   ДанныеОНачисленияхДляРасчетаСреднегоЗаработкаОбщий.Сотрудник,
      |   ДанныеОНачисленияхДляРасчетаСреднегоЗаработкаОбщий.Сумма
      |ИЗ
      |   РегистрНакопления.ДанныеОНачисленияхДляРасчетаСреднегоЗаработкаОбщий КАК ДанныеОНачисленияхДляРасчетаСреднегоЗаработкаОбщий";
   
   РезультатЗапроса = Запрос.Выполнить();
   
   ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
   СтрокаТекстовогоФайла = ПрочитанныйТекст.ПрочитатьСтроку();


эммм....а что дальше вот, понять не могу...

Rasty

сначала парсите файл и создаёте ТаблицуЗначений в который заносите данные из файла
Помогли - Скажи спасибо! Решил сам - поделись решением!
:)

GanG031

Цитата: Rasty от 15 фев 2016, 12:41
сначала парсите файл и создаёте ТаблицуЗначений в который заносите данные из файла


Сделал вот так:

Текст = Новый ТекстовыйДокумент();
Текст.Прочитать("D:\1.txt");
СимволРазделитель = ";";
Для a = 1 По Текст.КоличествоСтрок() Цикл
   Стр = Текст.ПолучитьСтроку(a) ;
   
   ВременнаяСтрока = Стр;
   //найдем разделитель
   НомерСимвола = Найти(ВременнаяСтрока, СимволРазделитель);
   
   Период =  СокрЛП(Лев(ВременнаяСтрока, НомерСимвола -1));
   ВременнаяСтрока =   Сред(ВременнаяСтрока,НомерСимвола + 1);
   
   
   НомерСимвола       = Найти(ВременнаяСтрока,СимволРазделитель);
   Сотрудник = СокрЛП(  Лев(ВременнаяСтрока,НомерСимвола - 1));
   ВременнаяСтрока =   Сред(ВременнаяСтрока,НомерСимвола + 1);
   
   
      НомерСимвола       = Найти(ВременнаяСтрока,СимволРазделитель);
   ТабельныйНомер = СокрЛП(  Лев(ВременнаяСтрока,НомерСимвола - 1));
   ВременнаяСтрока =   Сред(ВременнаяСтрока,НомерСимвола + 1);
   
   
      НомерСимвола       = Найти(ВременнаяСтрока,СимволРазделитель);
   СоставнаяЧасть = СокрЛП(  Лев(ВременнаяСтрока,НомерСимвола - 1));
   ВременнаяСтрока =   Сред(ВременнаяСтрока,НомерСимвола + 1);
   
   
      НомерСимвола       = Найти(ВременнаяСтрока,СимволРазделитель);
   Индексируется = СокрЛП(  Лев(ВременнаяСтрока,НомерСимвола - 1));
   ВременнаяСтрока =   Сред(ВременнаяСтрока,НомерСимвола + 1);
   
   
      
   Сумма =  Число (ВременнаяСтрока);
   
   ТаблицаЗначений = Новый ТаблицаЗначений;
   ТаблицаЗначений.Колонки.Добавить("Период");
   ТаблицаЗначений.Колонки.Добавить("Сотрудник");
   ТаблицаЗначений.Колонки.Добавить("ТабельныйНомер");
   ТаблицаЗначений.Колонки.Добавить("СоставнаяЧасть");
   ТаблицаЗначений.Колонки.Добавить("Индексируется");
   ТаблицаЗначений.Колонки.Добавить("Сумма");
   
   Строка = ТаблицаЗначений.Добавить();
   Строка = стр;


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

cska-fanat-kz

Цитата: GanG031 от 15 фев 2016, 15:06Строка = стр;

начали за здравие,
закончили за упокой
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

GanG031

Цитата: cska-fanat-kz от 15 фев 2016, 15:10
Цитата: GanG031 от 15 фев 2016, 15:06Строка = стр;

начали за здравие,
закончили за упокой


подскажите, как правильно сделать...

cska-fanat-kz

ТаблицаЗначений = Новый ТаблицаЗначений;
   ТаблицаЗначений.Колонки.Добавить("Период");
   ТаблицаЗначений.Колонки.Добавить("Сотрудник");
   ТаблицаЗначений.Колонки.Добавить("ТабельныйНомер");
   ТаблицаЗначений.Колонки.Добавить("СоставнаяЧасть");
   ТаблицаЗначений.Колонки.Добавить("Индексируется");
   ТаблицаЗначений.Колонки.Добавить("Сумма");
   
   Строка = ТаблицаЗначений.Добавить();
   Строка = стр;

Создали ТЗ и добавили в нее новую строку (Строка)
Теперь выше у вас сформировались 6 переменных, прочитанных из файла - ровно столько, сколько у вас колонок.
Обратите внимание что они типа Строка.
Т.е. например Сотрудника надо переделать в СправочникСсылка.Сотрудники,
а Индексируется - скорее всего в булево.

Строке ТЗ надо присвоить эти переменные (где надо меняя тип)
Строка.Период = Период
...
и т.д.
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Теги:

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

Рейтинг@Mail.ru

Поиск